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;
186 const char *
const log_groups[] = {
194 SIM_log_register_groups(cls, log_groups);
197 if (SIM_clear_exception() != SimExc_No_Exception) {
198 FATAL_ERROR(
"Adapter::initClass: %s", SIM_last_error());
200 SIM_extend_class(cls, clock);
202 SIM_register_notifier(cls, Sim_Notify_Frequency_Change, NULL);
205 if (SIM_clear_exception() != SimExc_No_Exception) {
206 FATAL_ERROR(
"Adapter::initClass: %s", SIM_last_error());
209 SIM_register_port(cls,
"engine", co_execute,
210 "co-execute helper object");
218 return &proxy_builder_;
228 static awareness::TlmSpyFactoryRegistry *spy_factory_registry() {
229 static awareness::TlmSpyFactoryRegistry registry;
241 bool allowUnconnectedPorts()
const;
242 void setAllowUnconnectedPorts(
const bool &val);
243 bool createProxyObjects()
const;
244 void setCreateProxyObjects(
const bool &val);
245 void set_argv(
const std::vector<std::string> &val);
246 std::vector<std::string> get_argv()
const;
247 void set_cci_preset_values(
248 const std::vector<std::pair<std::string, std::string>> &attr);
249 simics::ConfObjectRef get_same_cell_as()
const;
251 conf_object_t *createObject(conf_class_t *cls,
252 std::string full_name);
253 void createGaskets(
const std::vector<simics::ConfObjectRef> &objs);
255 static void initOnce();
256 static void initScAttributes(ConfClass *conf_class);
258 bool allow_unconnected_ports_;
259 bool create_proxy_objects_;
261 LateBinder late_binder_;
264 std::map<sc_core::sc_object *, awareness::ProxyInterface *> links_;
266 conf_object_t *dynamic_events_object_;
267 conf_object_t *dynamic_processes_object_;
274 awareness::TlmSpyFactoryRegistry spy_factory_registry_;
276#if INTC_EXT && USE_SIMICS_CCI
277 cci_utils::broker broker_;
278 conf_object_t *cci_global_;
286 template <
typename C>
288 AdapterBase::initClassInternal<C>(conf_class);
291#ifdef REGISTER_SYSTEMC_GASKET_CLASSES
298#if INTC_EXT && USE_SIMICS_CHECKPOINTING
299class AdapterCheckpointable :
public AdapterBase,
public Checkpoint {
301 explicit AdapterCheckpointable(ConfObjectRef o);
303 template <
typename C>
304 static void initClassInternal(ConfClass *conf_class) {
305 static iface::CheckpointSimicsAdapter<C> checkpoint_simics_adapter;
306 conf_class->add(checkpoint_simics_adapter);
307 static iface::TemporalStateSimicsAdapter<C> temporal_simics_adapter;
308 conf_class->add(temporal_simics_adapter);
309 AdapterBase::initClassInternal<C>(conf_class);
310 conf_class->add(Attribute(
"sc_state",
"[s*]",
311 "When this attribute is set the SystemC "
312 "state is restored from disk",
313 ATTR_GETTER(AdapterCheckpointable,
315 ATTR_SETTER(AdapterCheckpointable,
319#ifdef REGISTER_SYSTEMC_GASKET_CLASSES
320 simics::systemc::initGasketClassesCheckpointable(MODULE_NAME);
325 virtual void finalize();
327using 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:234
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:222
static awareness::ProxyBuilder * proxy_builder()
Definition: adapter.h:217
static void initClassInternal(ConfClass *conf_class)
Definition: adapter.h:143
Definition: adapter.h:282
static void initClassInternal(ConfClass *conf_class)
Definition: adapter.h:287
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
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:34
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
void bindUnmappedSimicsAdapters(conf_class_t *conf_class)
Bind all adapters that are still pending mapping to a conf_class.
Definition: simics_adapter.h:186
conf_class_t * SIM_get_class(const char *NOTNULL name)
AdapterNonCheckpointable Adapter
Definition: adapter.h:329
void initGasketClasses(const char *module_name)