SystemC  2.3.1
Accellera SystemC proof-of-concept library
sc_module.h
Go to the documentation of this file.
1 /*****************************************************************************
2 
3  The following code is derived, directly or indirectly, from the SystemC
4  source code Copyright (c) 1996-2014 by all Contributors.
5  All Rights reserved.
6 
7  The contents of this file are subject to the restrictions and limitations
8  set forth in the SystemC Open Source License (the "License");
9  You may not use this file except in compliance with such restrictions and
10  limitations. You may obtain instructions on how to receive a copy of the
11  License at http://www.accellera.org/. Software distributed by Contributors
12  under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
13  ANY KIND, either express or implied. See the License for the specific
14  language governing rights and limitations under the License.
15 
16  *****************************************************************************/
17 
18 /*****************************************************************************
19 
20  sc_module.h -- Base class of all hierarchical modules and channels.
21 
22  Original Author: Stan Y. Liao, Synopsys, Inc.
23  Martin Janssen, Synopsys, Inc.
24 
25  CHANGE LOG AT THE END OF THE FILE
26  *****************************************************************************/
27 
28 
29 #ifndef SC_MODULE_H
30 #define SC_MODULE_H
31 
33 #include "sysc/kernel/sc_process.h"
36 #include "sysc/kernel/sc_time.h"
37 #include "sysc/kernel/sc_wait.h"
39 #include "sysc/kernel/sc_process.h"
41 #include "sysc/utils/sc_list.h"
42 
43 namespace sc_core {
44 
45 class sc_name_gen;
46 template<class T> class sc_in;
47 template<class T> class sc_inout;
48 template<class T> class sc_out;
49 
50 // ----------------------------------------------------------------------------
51 // STRUCT : sc_bind_proxy
52 //
53 // Struct for temporarily storing a pointer to an interface or port.
54 // Used for positional binding.
55 // ----------------------------------------------------------------------------
56 
58 {
61 
62  sc_bind_proxy();
65 };
66 
67 
68 extern const sc_bind_proxy SC_BIND_PROXY_NIL;
69 
70 
71 // ----------------------------------------------------------------------------
72 // CLASS : sc_module
73 //
74 // Base class for all structural entities.
75 // ----------------------------------------------------------------------------
76 
77 class sc_module
78 : public sc_object, public sc_process_host
79 {
80  friend class sc_module_name;
81  friend class sc_module_registry;
82  friend class sc_object;
83  friend class sc_port_registry;
84  friend class sc_process_b;
85  friend class sc_simcontext;
86 
87 public:
88 
90  { return simcontext(); }
91 
92  // to generate unique names for objects in an MT-Safe way
93  const char* gen_unique_name( const char* basename_, bool preserve_first );
94 
95  virtual const char* kind() const
96  { return "sc_module"; }
97 
98 protected:
99 
100  // called by construction_done
101  virtual void before_end_of_elaboration();
102 
103  void construction_done();
104 
105  // called by elaboration_done (does nothing by default)
106  virtual void end_of_elaboration();
107 
108  void elaboration_done( bool& );
109 
110  // called by start_simulation (does nothing by default)
111  virtual void start_of_simulation();
112 
113  void start_simulation();
114 
115  // called by simulation_done (does nothing by default)
116  virtual void end_of_simulation();
117 
118  void simulation_done();
119 
120  void sc_module_init();
121 
122  // constructor
123  sc_module();
124  sc_module( const sc_module_name& nm ); /* for those used to old style */
125 
126  /* DEPRECATED */ sc_module( const char* nm );
127  /* DEPRECATED */ sc_module( const std::string& nm );
128 
129 public:
130 
131  // destructor
132  virtual ~sc_module();
133 
134  // positional binding methods
135 
138 
140  { return operator << ( interface_ ); }
141 
143  { return operator << ( port_ ); }
144 
145  // operator() is declared at the end of the class.
146 
147  const ::std::vector<sc_object*>& get_child_objects() const;
148 
149 protected:
150 
151  // this must be called by user-defined modules
152  void end_module();
153 
154 
155  // to prevent initialization for SC_METHODs and SC_THREADs
156  void dont_initialize();
157 
158  // positional binding code - used by operator ()
159 
160  void positional_bind( sc_interface& );
161  void positional_bind( sc_port_base& );
162 
163  // set reset sensitivity for SC_xTHREADs
164  void async_reset_signal_is( const sc_in<bool>& port, bool level );
165  void async_reset_signal_is( const sc_inout<bool>& port, bool level );
166  void async_reset_signal_is( const sc_out<bool>& port, bool level );
167  void async_reset_signal_is( const sc_signal_in_if<bool>& iface, bool level);
168  void reset_signal_is( const sc_in<bool>& port, bool level );
169  void reset_signal_is( const sc_inout<bool>& port, bool level );
170  void reset_signal_is( const sc_out<bool>& port, bool level );
171  void reset_signal_is( const sc_signal_in_if<bool>& iface, bool level );
172 
173  // static sensitivity for SC_THREADs and SC_CTHREADs
174 
175  void wait()
176  { ::sc_core::wait( simcontext() ); }
177 
178  // dynamic sensitivity for SC_THREADs and SC_CTHREADs
179 
180  void wait( const sc_event& e )
181  { ::sc_core::wait( e, simcontext() ); }
182 
183  void wait( const sc_event_or_list& el )
184  { ::sc_core::wait( el, simcontext() ); }
185 
186  void wait( const sc_event_and_list& el )
187  { ::sc_core::wait( el, simcontext() ); }
188 
189  void wait( const sc_time& t )
190  { ::sc_core::wait( t, simcontext() ); }
191 
192  void wait( double v, sc_time_unit tu )
193  { ::sc_core::wait( sc_time( v, tu, simcontext() ), simcontext() ); }
194 
195  void wait( const sc_time& t, const sc_event& e )
196  { ::sc_core::wait( t, e, simcontext() ); }
197 
198  void wait( double v, sc_time_unit tu, const sc_event& e )
199  { ::sc_core::wait(
200  sc_time( v, tu, simcontext() ), e, simcontext() ); }
201 
202  void wait( const sc_time& t, const sc_event_or_list& el )
203  { ::sc_core::wait( t, el, simcontext() ); }
204 
205  void wait( double v, sc_time_unit tu, const sc_event_or_list& el )
206  { ::sc_core::wait( sc_time( v, tu, simcontext() ), el, simcontext() ); }
207 
208  void wait( const sc_time& t, const sc_event_and_list& el )
209  { ::sc_core::wait( t, el, simcontext() ); }
210 
211  void wait( double v, sc_time_unit tu, const sc_event_and_list& el )
212  { ::sc_core::wait( sc_time( v, tu, simcontext() ), el, simcontext() ); }
213 
214 
215  // static sensitivity for SC_METHODs
216 
219 
220 
221  // dynamic sensitivty for SC_METHODs
222 
223  void next_trigger( const sc_event& e )
225 
226  void next_trigger( const sc_event_or_list& el )
227  { ::sc_core::next_trigger( el, simcontext() ); }
228 
229  void next_trigger( const sc_event_and_list& el )
230  { ::sc_core::next_trigger( el, simcontext() ); }
231 
232  void next_trigger( const sc_time& t )
234 
235  void next_trigger( double v, sc_time_unit tu )
237  sc_time( v, tu, simcontext() ), simcontext() ); }
238 
239  void next_trigger( const sc_time& t, const sc_event& e )
240  { ::sc_core::next_trigger( t, e, simcontext() ); }
241 
242  void next_trigger( double v, sc_time_unit tu, const sc_event& e )
244  sc_time( v, tu, simcontext() ), e, simcontext() ); }
245 
246  void next_trigger( const sc_time& t, const sc_event_or_list& el )
247  { ::sc_core::next_trigger( t, el, simcontext() ); }
248 
249  void next_trigger( double v, sc_time_unit tu, const sc_event_or_list& el )
251  sc_time( v, tu, simcontext() ), el, simcontext() ); }
252 
253  void next_trigger( const sc_time& t, const sc_event_and_list& el )
254  { ::sc_core::next_trigger( t, el, simcontext() ); }
255 
256  void next_trigger( double v, sc_time_unit tu, const sc_event_and_list& el )
258  sc_time( v, tu, simcontext() ), el, simcontext() ); }
259 
260 
261  // for SC_METHODs and SC_THREADs and SC_CTHREADs
262 
263  bool timed_out()
265 
266 
267  // for SC_CTHREADs
268 
269  void halt()
270  { ::sc_core::halt( simcontext() ); }
271 
272  void wait( int n )
273  { ::sc_core::wait( n, simcontext() ); }
274 
276  { ::sc_core::at_posedge( s, simcontext() ); }
277 
279  { ::sc_core::at_posedge( s, simcontext() ); }
280 
282  { ::sc_core::at_negedge( s, simcontext() ); }
283 
285  { ::sc_core::at_negedge( s, simcontext() ); }
286 
287  // Catch uses of watching:
288  void watching( bool /* expr */ )
289  { SC_REPORT_ERROR(SC_ID_WATCHING_NOT_ALLOWED_,""); }
290 
291  // These are protected so that user derived classes can refer to them.
295 
296  // Function to set the stack size of the current (c)thread process.
297  void set_stack_size( std::size_t );
298 
299  int append_port( sc_port_base* );
300 
301 private:
302  sc_module( const sc_module& );
303  const sc_module& operator = ( const sc_module& );
304 
305 private:
306 
307  bool m_end_module_called;
308  std::vector<sc_port_base*>* m_port_vec;
309  int m_port_index;
310  sc_name_gen* m_name_gen;
311  sc_module_name* m_module_name_p;
312 
313 public:
314 
315  void defunct() { }
316 
317  // positional binding methods (cont'd)
318 
319  void operator () ( const sc_bind_proxy& p001,
320  const sc_bind_proxy& p002 = SC_BIND_PROXY_NIL,
321  const sc_bind_proxy& p003 = SC_BIND_PROXY_NIL,
322  const sc_bind_proxy& p004 = SC_BIND_PROXY_NIL,
323  const sc_bind_proxy& p005 = SC_BIND_PROXY_NIL,
324  const sc_bind_proxy& p006 = SC_BIND_PROXY_NIL,
325  const sc_bind_proxy& p007 = SC_BIND_PROXY_NIL,
326  const sc_bind_proxy& p008 = SC_BIND_PROXY_NIL,
327  const sc_bind_proxy& p009 = SC_BIND_PROXY_NIL,
328  const sc_bind_proxy& p010 = SC_BIND_PROXY_NIL,
329  const sc_bind_proxy& p011 = SC_BIND_PROXY_NIL,
330  const sc_bind_proxy& p012 = SC_BIND_PROXY_NIL,
331  const sc_bind_proxy& p013 = SC_BIND_PROXY_NIL,
332  const sc_bind_proxy& p014 = SC_BIND_PROXY_NIL,
333  const sc_bind_proxy& p015 = SC_BIND_PROXY_NIL,
334  const sc_bind_proxy& p016 = SC_BIND_PROXY_NIL,
335  const sc_bind_proxy& p017 = SC_BIND_PROXY_NIL,
336  const sc_bind_proxy& p018 = SC_BIND_PROXY_NIL,
337  const sc_bind_proxy& p019 = SC_BIND_PROXY_NIL,
338  const sc_bind_proxy& p020 = SC_BIND_PROXY_NIL,
339  const sc_bind_proxy& p021 = SC_BIND_PROXY_NIL,
340  const sc_bind_proxy& p022 = SC_BIND_PROXY_NIL,
341  const sc_bind_proxy& p023 = SC_BIND_PROXY_NIL,
342  const sc_bind_proxy& p024 = SC_BIND_PROXY_NIL,
343  const sc_bind_proxy& p025 = SC_BIND_PROXY_NIL,
344  const sc_bind_proxy& p026 = SC_BIND_PROXY_NIL,
345  const sc_bind_proxy& p027 = SC_BIND_PROXY_NIL,
346  const sc_bind_proxy& p028 = SC_BIND_PROXY_NIL,
347  const sc_bind_proxy& p029 = SC_BIND_PROXY_NIL,
348  const sc_bind_proxy& p030 = SC_BIND_PROXY_NIL,
349  const sc_bind_proxy& p031 = SC_BIND_PROXY_NIL,
350  const sc_bind_proxy& p032 = SC_BIND_PROXY_NIL,
351  const sc_bind_proxy& p033 = SC_BIND_PROXY_NIL,
352  const sc_bind_proxy& p034 = SC_BIND_PROXY_NIL,
353  const sc_bind_proxy& p035 = SC_BIND_PROXY_NIL,
354  const sc_bind_proxy& p036 = SC_BIND_PROXY_NIL,
355  const sc_bind_proxy& p037 = SC_BIND_PROXY_NIL,
356  const sc_bind_proxy& p038 = SC_BIND_PROXY_NIL,
357  const sc_bind_proxy& p039 = SC_BIND_PROXY_NIL,
358  const sc_bind_proxy& p040 = SC_BIND_PROXY_NIL,
359  const sc_bind_proxy& p041 = SC_BIND_PROXY_NIL,
360  const sc_bind_proxy& p042 = SC_BIND_PROXY_NIL,
361  const sc_bind_proxy& p043 = SC_BIND_PROXY_NIL,
362  const sc_bind_proxy& p044 = SC_BIND_PROXY_NIL,
363  const sc_bind_proxy& p045 = SC_BIND_PROXY_NIL,
364  const sc_bind_proxy& p046 = SC_BIND_PROXY_NIL,
365  const sc_bind_proxy& p047 = SC_BIND_PROXY_NIL,
366  const sc_bind_proxy& p048 = SC_BIND_PROXY_NIL,
367  const sc_bind_proxy& p049 = SC_BIND_PROXY_NIL,
368  const sc_bind_proxy& p050 = SC_BIND_PROXY_NIL,
369  const sc_bind_proxy& p051 = SC_BIND_PROXY_NIL,
370  const sc_bind_proxy& p052 = SC_BIND_PROXY_NIL,
371  const sc_bind_proxy& p053 = SC_BIND_PROXY_NIL,
372  const sc_bind_proxy& p054 = SC_BIND_PROXY_NIL,
373  const sc_bind_proxy& p055 = SC_BIND_PROXY_NIL,
374  const sc_bind_proxy& p056 = SC_BIND_PROXY_NIL,
375  const sc_bind_proxy& p057 = SC_BIND_PROXY_NIL,
376  const sc_bind_proxy& p058 = SC_BIND_PROXY_NIL,
377  const sc_bind_proxy& p059 = SC_BIND_PROXY_NIL,
378  const sc_bind_proxy& p060 = SC_BIND_PROXY_NIL,
379  const sc_bind_proxy& p061 = SC_BIND_PROXY_NIL,
380  const sc_bind_proxy& p062 = SC_BIND_PROXY_NIL,
381  const sc_bind_proxy& p063 = SC_BIND_PROXY_NIL,
382  const sc_bind_proxy& p064 = SC_BIND_PROXY_NIL );
383 
384 };
385 
386 extern sc_module* sc_module_dynalloc(sc_module*);
387 #define SC_NEW(x) ::sc_core::sc_module_dynalloc(new x);
388 
389 
390 // -----------------------------------------------------------------------------
391 // SOME MACROS TO SIMPLIFY SYNTAX:
392 // -----------------------------------------------------------------------------
393 
394 #define SC_MODULE(user_module_name) \
395  struct user_module_name : ::sc_core::sc_module
396 
397 #define SC_CTOR(user_module_name) \
398  typedef user_module_name SC_CURRENT_USER_MODULE; \
399  user_module_name( ::sc_core::sc_module_name )
400 
401 // the SC_HAS_PROCESS macro call must be followed by a ;
402 #define SC_HAS_PROCESS(user_module_name) \
403  typedef user_module_name SC_CURRENT_USER_MODULE
404 
405 // The this-> construct on sensitive operators in the macros below is
406 // required for gcc 4.x when a templated class has a templated parent that is
407 // derived from sc_module:
408 //
409 // template<typename X>
410 // class B : public sc_module;
411 // template<typename X>
412 // class A : public B<X>
413 
414 #define declare_method_process(handle, name, host_tag, func) \
415  { \
416  ::sc_core::sc_process_handle handle = \
417  sc_core::sc_get_curr_simcontext()->create_method_process( \
418  name, false, SC_MAKE_FUNC_PTR( host_tag, func ), \
419  this, 0 ); \
420  this->sensitive << handle; \
421  this->sensitive_pos << handle; \
422  this->sensitive_neg << handle; \
423  }
424 
425 #define declare_thread_process(handle, name, host_tag, func) \
426  { \
427  ::sc_core::sc_process_handle handle = \
428  sc_core::sc_get_curr_simcontext()->create_thread_process( \
429  name, false, \
430  SC_MAKE_FUNC_PTR( host_tag, func ), this, 0 ); \
431  this->sensitive << handle; \
432  this->sensitive_pos << handle; \
433  this->sensitive_neg << handle; \
434  }
435 
436 #define declare_cthread_process(handle, name, host_tag, func, edge) \
437  { \
438  ::sc_core::sc_process_handle handle = \
439  sc_core::sc_get_curr_simcontext()->create_cthread_process( \
440  name, false, \
441  SC_MAKE_FUNC_PTR( host_tag, func ), this, 0 ); \
442  this->sensitive.operator() ( handle, edge );\
443  }
444 
445 #define SC_CTHREAD(func, edge) \
446  declare_cthread_process( func ## _handle, \
447  #func, \
448  SC_CURRENT_USER_MODULE, \
449  func, \
450  edge )
451 
452 #define SC_METHOD(func) \
453  declare_method_process( func ## _handle, \
454  #func, \
455  SC_CURRENT_USER_MODULE, \
456  func )
457 
458 #define SC_THREAD(func) \
459  declare_thread_process( func ## _handle, \
460  #func, \
461  SC_CURRENT_USER_MODULE, \
462  func )
463 
464 
465 
466 // ----------------------------------------------------------------------------
467 // TYPEDEFS
468 // ----------------------------------------------------------------------------
469 
472 
473 } // namespace sc_core
474 
475 /*****************************************************************************
476 
477  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
478  changes you are making here.
479 
480  Name, Affiliation, Date: Ali Dasdan, Synopsys, Inc.
481  Description of Modification: - Implementation of operator() and operator,
482  positional connection method.
483  - Implementation of error checking in
484  operator<<'s.
485  - Implementation of the function test_module_prm.
486  - Implementation of set_stack_size().
487 
488  Name, Affiliation, Date: Gene Bushuyev, Synopsys, Inc.
489  Description of Modification: - Change implementation for VC6.
490 
491  Name, Affiliation, Date: Andy Godorich, Forte
492  Bishnupriya Bhattacharya, Cadence Design Systems,
493  25 August, 2003
494  Description of Modification: inherit from sc_process_host as a part of
495  implementing dynamic processes
496 
497  *****************************************************************************/
498 
499 // $Log: sc_module.h,v $
500 // Revision 1.11 2011/08/26 20:46:10 acg
501 // Andy Goodrich: moved the modification log to the end of the file to
502 // eliminate source line number skew when check-ins are done.
503 //
504 // Revision 1.10 2011/08/15 16:43:24 acg
505 // Torsten Maehne: changes to remove unused argument warnings.
506 //
507 // Revision 1.9 2011/03/05 19:44:20 acg
508 // Andy Goodrich: changes for object and event naming and structures.
509 //
510 // Revision 1.8 2011/02/18 20:27:14 acg
511 // Andy Goodrich: Updated Copyrights.
512 //
513 // Revision 1.7 2011/02/13 21:47:37 acg
514 // Andy Goodrich: update copyright notice.
515 //
516 // Revision 1.6 2011/01/18 20:10:44 acg
517 // Andy Goodrich: changes for IEEE1666_2011 semantics.
518 //
519 // Revision 1.5 2010/12/07 20:09:12 acg
520 // Andy Goodrich: remove unused signal declaration
521 //
522 // Revision 1.4 2009/05/22 16:06:29 acg
523 // Andy Goodrich: process control updates.
524 //
525 // Revision 1.3 2008/05/22 17:06:25 acg
526 // Andy Goodrich: updated copyright notice to include 2008.
527 //
528 // Revision 1.2 2007/01/24 20:14:40 acg
529 // Andy Goodrich: improved comments about the use of this-> in the macros
530 // that access sensitive.
531 //
532 // Revision 1.1.1.1 2006/12/15 20:20:05 acg
533 // SystemC 2.3
534 //
535 // Revision 1.10 2006/12/02 20:58:18 acg
536 // Andy Goodrich: updates from 2.2 for IEEE 1666 support.
537 //
538 // Revision 1.7 2006/04/11 23:13:21 acg
539 // Andy Goodrich: Changes for reduced reset support that only includes
540 // sc_cthread, but has preliminary hooks for expanding to method and thread
541 // processes also.
542 //
543 // Revision 1.6 2006/03/15 17:53:34 acg
544 // Andy Goodrich, Forte Design
545 // Reordered includes to pick up <cassert> for use by sc_process_name.h
546 //
547 // Revision 1.5 2006/03/14 23:56:58 acg
548 // Andy Goodrich: This fixes a bug when an exception is thrown in
549 // sc_module::sc_module() for a dynamically allocated sc_module
550 // object. We are calling sc_module::end_module() on a module that has
551 // already been deleted. The scenario runs like this:
552 //
553 // a) the sc_module constructor is entered
554 // b) the exception is thrown
555 // c) the exception processor deletes the storage for the sc_module
556 // d) the stack is unrolled causing the sc_module_name instance to be deleted
557 // e) ~sc_module_name() calls end_module() with its pointer to the sc_module
558 // f) because the sc_module has been deleted its storage is corrupted,
559 // either by linking it to a free space chain, or by reuse of some sort
560 // g) the m_simc field is garbage
561 // h) the m_object_manager field is also garbage
562 // i) an exception occurs
563 //
564 // This does not happen for automatic sc_module instances since the
565 // storage for the module is not reclaimed its just part of the stack.
566 //
567 // I am fixing this by having the destructor for sc_module clear the
568 // module pointer in its sc_module_name instance. That cuts things at
569 // step (e) above, since the pointer will be null if the module has
570 // already been deleted. To make sure the module stack is okay, I call
571 // end-module() in ~sc_module in the case where there is an
572 // sc_module_name pointer lying around.
573 //
574 // Revision 1.4 2006/01/24 20:49:05 acg
575 // Andy Goodrich: changes to remove the use of deprecated features within the
576 // simulator, and to issue warning messages when deprecated features are used.
577 //
578 // Revision 1.3 2006/01/13 18:44:30 acg
579 // Added $Log to record CVS changes into the source.
580 
581 #endif
void at_negedge(const sc_signal_in_if< bool > &, sc_simcontext *=sc_get_curr_simcontext())
void at_negedge(const sc_signal_in_if< bool > &s)
Definition: sc_module.h:281
void wait(int, sc_simcontext *)
const char * gen_unique_name(const char *basename_, bool preserve_first)
void at_posedge(const sc_signal_in_if< bool > &, sc_simcontext *=sc_get_curr_simcontext())
void positional_bind(sc_interface &)
void wait(const sc_time &t)
Definition: sc_module.h:189
sc_time_unit
Definition: sc_time.h:56
virtual void start_of_simulation()
void async_reset_signal_is(const sc_in< bool > &port, bool level)
void next_trigger(double v, sc_time_unit tu, const sc_event_and_list &el)
Definition: sc_module.h:256
void halt(sc_simcontext *)
void next_trigger(const sc_event &e)
Definition: sc_module.h:223
sc_interface * iface
Definition: sc_module.h:59
void next_trigger(double v, sc_time_unit tu, const sc_event_or_list &el)
Definition: sc_module.h:249
void wait(const sc_time &t, const sc_event_or_list &el)
Definition: sc_module.h:202
sc_module * sc_module_dynalloc(sc_module *)
void next_trigger(const sc_event_and_list &el)
Definition: sc_module.h:229
void at_posedge(const sc_signal_in_if< bool > &s)
Definition: sc_module.h:275
void wait(const sc_event_and_list &el)
Definition: sc_module.h:186
sc_module sc_behavior
Definition: sc_module.h:471
virtual const char * kind() const
Definition: sc_module.h:95
operand is not sc_logic object already exists internal maximum number of processes per module module construction not properly hierarchical name as shown may be incorrect due to previous errors incorrect use of sc_module_name set time resolution failed default time unit changed to time resolution next_trigger() is only allowed in SC_METHODs" ) SC_DEFINE_MESSAGE(SC_ID_IMMEDIATE_NOTIFICATION_
void wait(double v, sc_time_unit tu)
Definition: sc_module.h:192
void reset_signal_is(const sc_in< bool > &port, bool level)
sc_module & operator,(sc_interface &interface_)
Definition: sc_module.h:139
sc_port_base * port
Definition: sc_module.h:60
const sc_bind_proxy SC_BIND_PROXY_NIL
sc_simcontext * sc_get_curr_simcontext()
Definition: sc_module.h:89
void next_trigger(const sc_time &t, const sc_event_or_list &el)
Definition: sc_module.h:246
void wait(const sc_time &t, const sc_event_and_list &el)
Definition: sc_module.h:208
sc_sensitive_neg sensitive_neg
Definition: sc_module.h:294
void elaboration_done(bool &)
virtual void end_of_elaboration()
void at_negedge(const sc_signal_in_if< sc_dt::sc_logic > &s)
Definition: sc_module.h:284
void wait(const sc_event_or_list &el)
Definition: sc_module.h:183
void wait(double v, sc_time_unit tu, const sc_event_and_list &el)
Definition: sc_module.h:211
virtual void end_of_simulation()
bool timed_out(sc_simcontext *)
virtual void before_end_of_elaboration()
sc_sensitive_pos sensitive_pos
Definition: sc_module.h:293
void next_trigger(const sc_time &t, const sc_event &e)
Definition: sc_module.h:239
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)
void wait(double v, sc_time_unit tu, const sc_event_or_list &el)
Definition: sc_module.h:205
sc_module sc_channel
Definition: sc_module.h:470
#define SC_REPORT_ERROR(msg_type, msg)
Definition: sc_report.h:213
int append_port(sc_port_base *)
void next_trigger(const sc_event_or_list &el)
Definition: sc_module.h:226
sc_simcontext * simcontext() const
Definition: sc_object.h:81
void watching(bool)
Definition: sc_module.h:288
void at_posedge(const sc_signal_in_if< sc_dt::sc_logic > &s)
Definition: sc_module.h:278
void wait(int n)
Definition: sc_module.h:272
sc_sensitive sensitive
Definition: sc_module.h:292
void wait(double v, sc_time_unit tu, const sc_event &e)
Definition: sc_module.h:198
const ::std::vector< sc_object * > & get_child_objects() const
virtual ~sc_module()
void wait(const sc_time &t, const sc_event &e)
Definition: sc_module.h:195
void next_trigger(const sc_time &t)
Definition: sc_module.h:232
void next_trigger(const sc_time &t, const sc_event_and_list &el)
Definition: sc_module.h:253
void wait(const sc_event &e)
Definition: sc_module.h:180
sc_module & operator<<(sc_interface &)
void set_stack_size(std::size_t)
void next_trigger(double v, sc_time_unit tu)
Definition: sc_module.h:235
void next_trigger(double v, sc_time_unit tu, const sc_event &e)
Definition: sc_module.h:242