50template<
class T>
class sc_in;
51template<
class T>
class sc_inout;
52template<
class T>
class sc_out;
94 {
return simcontext(); }
99 virtual const char*
kind()
const
100 {
return "sc_module"; }
158 template<
typename EdgeType>
160 { sensitive( declare_cthread_process(func, name), edge ); }
207 sc_time( v, tu, simcontext() ), e, simcontext() ); }
244 sc_time( v, tu, simcontext() ), simcontext() ); }
251 sc_time( v, tu, simcontext() ), e, simcontext() ); }
258 sc_time( v, tu, simcontext() ), el, simcontext() ); }
265 sc_time( v, tu, simcontext() ), el, simcontext() ); }
309 void finalize_module();
316 bool m_end_module_called;
317 std::vector<sc_port_base*>* m_port_vec;
396#ifdef SC_ALLOW_MACROS_WITHOUT_SEMICOLON
397# define SC_SEMICOLON_ ;
399# define SC_SEMICOLON_
409#define SC_MODULE(user_module_name) \
410 struct user_module_name : ::sc_core::sc_module
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.")]]
417#define SC_HAS_PROCESS(user_module_type) \
418 static_assert(sc_core::sc_has_process_used, "no-op to avoid stray ';'")
420#define SC_CURRENT_USER_MODULE_TYPE \
421 std::remove_reference<decltype(*this)>::type
425#define SC_CTOR(...) \
426 SC_CTOR_IMPL_(__VA_ARGS__)(__VA_ARGS__)
429#define SC_CTOR_IMPL_ONE_(user_module_name) \
430 user_module_name( ::sc_core::sc_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__))
449#define SC_CTHREAD(func, edge) \
450 this->declare_cthread_process \
451 ( SC_MAKE_FUNC_PTR(SC_CURRENT_USER_MODULE_TYPE, func), #func, edge ) \
454#define SC_METHOD(func) \
455 this->declare_method_process \
456 ( SC_MAKE_FUNC_PTR(SC_CURRENT_USER_MODULE_TYPE, func), #func ) \
459#define SC_THREAD(func) \
460 this->declare_thread_process \
461 ( SC_MAKE_FUNC_PTR(SC_CURRENT_USER_MODULE_TYPE, func), #func ) \
#define SC_REPORT_ERROR(msg_type, msg)
SC_API bool timed_out(sc_simcontext *)
SC_API const sc_bind_proxy SC_BIND_PROXY_NIL
void SC_API halt(sc_simcontext *)
inline::std::ostream & operator<<(::std::ostream &os, const sc_fifo< T > &a)
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
void(sc_process_host::* sc_entry_func)()
void at_negedge(const sc_signal_in_if< bool > &, sc_simcontext *=sc_get_curr_simcontext())
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_bind_proxy(sc_port_base &)
sc_bind_proxy(sc_interface &)
void declare_cthread_process(sc_entry_func func, const char *name, EdgeType &edge)
void elaboration_done(bool &)
void next_trigger(const sc_time &t)
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)
void at_negedge(const sc_signal_in_if< bool > &s)
void next_trigger(double v, sc_time_unit tu, const sc_event_or_list &el)
void next_trigger(const sc_event_and_list &el)
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
void wait(const sc_time &t, const sc_event_and_list &el)
void wait(double v, sc_time_unit tu, const sc_event_or_list &el)
sc_simcontext * sc_get_curr_simcontext()
void next_trigger(double v, sc_time_unit tu)
void at_negedge(const sc_signal_in_if< sc_dt::sc_logic > &s)
void at_posedge(const sc_signal_in_if< bool > &s)
void next_trigger(const sc_time &t, const sc_event_or_list &el)
void set_stack_size(std::size_t)
void next_trigger(const sc_event_or_list &el)
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)
void async_reset_signal_is(const sc_signal_in_if< bool > &iface, bool level)
void wait(const sc_time &t)
void wait(const sc_event_and_list &el)
void next_trigger(const sc_time &t, const sc_event_and_list &el)
virtual void end_of_simulation()
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)
void next_trigger(double v, sc_time_unit tu, const sc_event_and_list &el)
void wait(double v, sc_time_unit tu, const sc_event &e)
void wait(double v, sc_time_unit tu)
void declare_thread_process(sc_entry_func func, const char *name)
void at_posedge(const sc_signal_in_if< sc_dt::sc_logic > &s)
sc_module(const std::string &nm)
sc_module(const sc_module_name &nm)
virtual const char * kind() const
void declare_method_process(sc_entry_func func, const char *name)
sc_sensitive_neg sensitive_neg
void next_trigger(const sc_time &t, const sc_event &e)
void wait(const sc_time &t, const sc_event &e)
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)
void async_reset_signal_is(const sc_out< bool > &port, bool level)
void wait(const sc_event_or_list &el)
void wait(const sc_time &t, const sc_event_or_list &el)