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