16#ifndef SIMICS_SYSTEMC_ADAPTER_H
17#define SIMICS_SYSTEMC_ADAPTER_H
21#include <simics/conf-object.h>
41#if INTC_EXT && USE_SIMICS_CHECKPOINTING
66#include <systemc-kernel__compiler-version-check.h>
67#include <systemc-library__compiler-version-check.h>
68#include <systemc-library__kernel-version-check.h>
70#if INTC_EXT && USE_SIMICS_CCI
71#include <cci_utils/broker.h>
142 template <
typename C>
145 conf_class->add(simcontext_simics_adapter);
147 memory_profiler_control_simics_adapter;
148 conf_class->add(memory_profiler_control_simics_adapter);
151 conf_class->add(ppc_simics_adapter);
153 conf_class->add(version_simics_adapter);
155 conf_class->add(event_delta_simics_adapter);
157 conf_class->add(execute_simics_adapter);
159 conf_class->add(frequency_simics_adapter);
161 concurrency_group_simics_adapter;
162 conf_class->add(concurrency_group_simics_adapter);
164 concurrency_mode_simics_adapter;
165 conf_class->add(concurrency_mode_simics_adapter);
167 execute_control_simics_adapter;
168 conf_class->add(execute_control_simics_adapter);
170 conf_class->add(gasket_info_simics_adapter);
172 if ((std::is_base_of<simics2tlm::IoMemoryGasketAdapter, C>::value ||
173 std::is_base_of<simics2tlm::TransactionGasketAdapter, C>::value) &&
174 std::is_base_of<iface::RegisterViewInterface, C>::value) {
176 register_view_simics_adapter;
177 conf_class->add(register_view_simics_adapter);
181 initScAttributes(conf_class);
182 conf_class_t *cls = *conf_class;
195 Invoker invoker{cls};
198 const char *
const log_groups[] = {
206 SIM_log_register_groups(cls, log_groups);
209 if (SIM_clear_exception() != SimExc_No_Exception) {
210 FATAL_ERROR(
"Adapter::initClass: %s", SIM_last_error());
212 SIM_extend_class(cls, clock);
214 SIM_register_notifier(cls, Sim_Notify_Frequency_Change, NULL);
217 if (SIM_clear_exception() != SimExc_No_Exception) {
218 FATAL_ERROR(
"Adapter::initClass: %s", SIM_last_error());
221 SIM_register_port(cls,
"engine", co_execute,
222 "co-execute helper object");
230 return &proxy_builder_;
240 static awareness::TlmSpyFactoryRegistry *spy_factory_registry() {
241 static awareness::TlmSpyFactoryRegistry registry;
253 bool allowUnconnectedPorts()
const;
254 void setAllowUnconnectedPorts(
const bool &val);
255 bool createProxyObjects()
const;
256 void setCreateProxyObjects(
const bool &val);
257 void set_argv(
const std::vector<std::string> &val);
258 std::vector<std::string> get_argv()
const;
259 void set_cci_preset_values(
260 const std::vector<std::pair<std::string, std::string>> &attr);
261 simics::ConfObjectRef get_same_cell_as()
const;
263 conf_object_t *createObject(conf_class_t *cls,
264 std::string full_name);
265 void createGaskets(
const std::vector<simics::ConfObjectRef> &objs);
267 static void initOnce();
268 static void initScAttributes(ConfClass *conf_class);
270 bool allow_unconnected_ports_;
271 bool create_proxy_objects_;
273 LateBinder late_binder_;
276 std::map<sc_core::sc_object *, awareness::ProxyInterface *> links_;
278 conf_object_t *dynamic_events_object_;
279 conf_object_t *dynamic_processes_object_;
286 awareness::TlmSpyFactoryRegistry spy_factory_registry_;
288#if INTC_EXT && USE_SIMICS_CCI
289 cci_utils::broker broker_;
290 conf_object_t *cci_global_;
298 template <
typename C>
300 AdapterBase::initClassInternal<C>(conf_class);
303#ifdef REGISTER_SYSTEMC_GASKET_CLASSES
310#if INTC_EXT && USE_SIMICS_CHECKPOINTING
311class AdapterCheckpointable :
public AdapterBase,
public Checkpoint {
313 explicit AdapterCheckpointable(ConfObjectRef o);
315 template <
typename C>
316 static void initClassInternal(ConfClass *conf_class) {
317 static iface::CheckpointSimicsAdapter<C> checkpoint_simics_adapter;
318 conf_class->add(checkpoint_simics_adapter);
319 static iface::TemporalStateSimicsAdapter<C> temporal_simics_adapter;
320 conf_class->add(temporal_simics_adapter);
321 AdapterBase::initClassInternal<C>(conf_class);
322 conf_class->add(Attribute(
"sc_state",
"[s*]",
323 "When this attribute is set the SystemC "
324 "state is restored from disk",
325 ATTR_GETTER(AdapterCheckpointable,
327 ATTR_SETTER(AdapterCheckpointable,
331#ifdef REGISTER_SYSTEMC_GASKET_CLASSES
332 simics::systemc::initGasketClassesCheckpointable(MODULE_NAME);
337 virtual void finalize();
339using Adapter = AdapterCheckpointable;
Entry point for creating a Simics conf-object that adapts a SystemC model to Simics,...
Definition: adapter.h:96
virtual void elaborate()
Override this method to elaborate the SystemC hierarchy.
Definition: adapter.h:109
static SimulationInterface & simulation_from_conf_obj(conf_object_t *obj)
AdapterBase(ConfObjectRef o)
AdapterBase * is_systemc_adapter
Definition: adapter.h:98
std::vector< simics::ConfObjectRef > gaskets_
Definition: adapter.h:246
virtual void finalize()
Called during the finalize phase.
virtual void bindGaskets()
Override this method to bind Simics interfaces to SystemC after elaboration.
Definition: adapter.h:127
virtual void tagGaskets(simics::systemc::GasketTagInterface *gasket_tag)
Override this method to create tag based gaskets.
Definition: adapter.h:117
InternalInterface * internal()
Definition: adapter.h:234
static awareness::ProxyBuilder * proxy_builder()
Definition: adapter.h:229
static void initClassInternal(ConfClass *conf_class)
Definition: adapter.h:143
Definition: adapter.h:294
static void initClassInternal(ConfClass *conf_class)
Definition: adapter.h:299
Definition: gasket_info.h:29
This interface provides the means to create gaskets encapsulated in Simics objects.
Definition: gasket_tag.h:33
Definition: gasket_tag.h:68
Definition: internal_interface.h:25
Definition: internal.h:27
static void set_module_name(const char *module_name)
Definition: process_profiler_control.h:25
static Registry< T > * instance()
Definition: registry.h:70
Definition: sc_memory_profiler_control.h:24
Definition: sc_signal_access.h:24
Provides the interface to the SystemC simulation context.
Definition: simcontext.h:30
Provides the interface to the SystemC kernel.
Definition: simulation.h:54
Definition: state_handler.h:26
Definition: attributes.h:28
Definition: proxy_builder.h:50
Adapter for concurrency mode interface.
Definition: concurrency_group_simics_adapter.h:33
Adapter for concurrency mode interface.
Definition: concurrency_mode_simics_adapter.h:33
Definition: event_delta_simics_adapter.h:32
Adapter for concurrency group interface.
Definition: execute_control_simics_adapter.h:33
Definition: execute_simics_adapter.h:32
Definition: frequency_simics_adapter.h:32
Definition: register_view_simics_adapter.h:34
Definition: sc_gasket_info_simics_adapter.h:36
Definition: sc_memory_profiler_control_simics_adapter.h:33
Definition: sc_process_profiler_control_simics_adapter.h:35
Definition: sc_version_simics_adapter.h:35
Adapter for Simics simulation context interface.
Definition: simcontext_simics_adapter.h:34
Definition: simics_adapter_interface.h:29
virtual void set_map_adapter(bool map)=0
virtual void set_simics_class(conf_class_t *conf_class)=0
virtual bool map_adapter() const =0
conf_class_t * SIM_get_class(const char *NOTNULL name)
AdapterNonCheckpointable Adapter
Definition: adapter.h:341
void initGasketClasses(const char *module_name)