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-version-checks.h>
69#if INTC_EXT && USE_SIMICS_CCI
70#include <cci_utils/broker.h>
141 template <
typename C>
144 conf_class->add(simcontext_simics_adapter);
146 memory_profiler_control_simics_adapter;
147 conf_class->add(memory_profiler_control_simics_adapter);
150 conf_class->add(ppc_simics_adapter);
152 conf_class->add(version_simics_adapter);
154 conf_class->add(event_delta_simics_adapter);
156 conf_class->add(execute_simics_adapter);
158 conf_class->add(frequency_simics_adapter);
160 concurrency_group_simics_adapter;
161 conf_class->add(concurrency_group_simics_adapter);
163 concurrency_mode_simics_adapter;
164 conf_class->add(concurrency_mode_simics_adapter);
166 execute_control_simics_adapter;
167 conf_class->add(execute_control_simics_adapter);
169 conf_class->add(gasket_info_simics_adapter);
171 if ((std::is_base_of<simics2tlm::IoMemoryGasketAdapter, C>::value ||
172 std::is_base_of<simics2tlm::TransactionGasketAdapter, C>::value) &&
173 std::is_base_of<iface::RegisterViewInterface, C>::value) {
175 register_view_simics_adapter;
176 conf_class->add(register_view_simics_adapter);
180 initScAttributes(conf_class);
181 conf_class_t *cls = *conf_class;
194 Invoker invoker{cls};
197 const char *
const log_groups[] = {
205 SIM_log_register_groups(cls, log_groups);
208 if (SIM_clear_exception() != SimExc_No_Exception) {
209 FATAL_ERROR(
"Adapter::initClass: %s", SIM_last_error());
211 SIM_extend_class(cls, clock);
213 SIM_register_notifier(cls, Sim_Notify_Frequency_Change, NULL);
216 if (SIM_clear_exception() != SimExc_No_Exception) {
217 FATAL_ERROR(
"Adapter::initClass: %s", SIM_last_error());
220 SIM_register_port(cls,
"engine", co_execute,
221 "co-execute helper object");
229 return &proxy_builder_;
239 static awareness::TlmSpyFactoryRegistry *spy_factory_registry() {
240 static awareness::TlmSpyFactoryRegistry registry;
252 bool allowUnconnectedPorts()
const;
253 void setAllowUnconnectedPorts(
const bool &val);
254 bool createProxyObjects()
const;
255 void setCreateProxyObjects(
const bool &val);
256 void set_argv(
const std::vector<std::string> &val);
257 std::vector<std::string> get_argv()
const;
258 void set_cci_preset_values(
259 const std::vector<std::pair<std::string, std::string>> &attr);
260 simics::ConfObjectRef get_same_cell_as()
const;
262 conf_object_t *createObject(conf_class_t *cls,
263 std::string full_name);
264 void createGaskets(
const std::vector<simics::ConfObjectRef> &objs);
266 static void initOnce();
267 static void initScAttributes(ConfClass *conf_class);
269 bool allow_unconnected_ports_;
270 bool create_proxy_objects_;
272 LateBinder late_binder_;
275 std::map<sc_core::sc_object *, awareness::ProxyInterface *> links_;
277 conf_object_t *dynamic_events_object_;
278 conf_object_t *dynamic_processes_object_;
285 awareness::TlmSpyFactoryRegistry spy_factory_registry_;
287#if INTC_EXT && USE_SIMICS_CCI
288 cci_utils::broker broker_;
289 conf_object_t *cci_global_;
297 template <
typename C>
299 AdapterBase::initClassInternal<C>(conf_class);
302#ifdef REGISTER_SYSTEMC_GASKET_CLASSES
309#if INTC_EXT && USE_SIMICS_CHECKPOINTING
310class AdapterCheckpointable :
public AdapterBase,
public Checkpoint {
312 explicit AdapterCheckpointable(ConfObjectRef o);
314 template <
typename C>
315 static void initClassInternal(ConfClass *conf_class) {
316 static iface::CheckpointSimicsAdapter<C> checkpoint_simics_adapter;
317 conf_class->add(checkpoint_simics_adapter);
318 static iface::TemporalStateSimicsAdapter<C> temporal_simics_adapter;
319 conf_class->add(temporal_simics_adapter);
320 AdapterBase::initClassInternal<C>(conf_class);
321 conf_class->add(Attribute(
"sc_state",
"[s*]",
322 "When this attribute is set the SystemC "
323 "state is restored from disk",
324 ATTR_GETTER(AdapterCheckpointable,
326 ATTR_SETTER(AdapterCheckpointable,
330#ifdef REGISTER_SYSTEMC_GASKET_CLASSES
331 simics::systemc::initGasketClassesCheckpointable(MODULE_NAME);
336 virtual void finalize();
338using Adapter = AdapterCheckpointable;
Entry point for creating a Simics conf-object that adapts a SystemC model to Simics,...
Definition: adapter.h:95
virtual void elaborate()
Override this method to elaborate the SystemC hierarchy.
Definition: adapter.h:108
static SimulationInterface & simulation_from_conf_obj(conf_object_t *obj)
AdapterBase(ConfObjectRef o)
AdapterBase * is_systemc_adapter
Definition: adapter.h:97
std::vector< simics::ConfObjectRef > gaskets_
Definition: adapter.h:245
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:126
virtual void tagGaskets(simics::systemc::GasketTagInterface *gasket_tag)
Override this method to create tag based gaskets.
Definition: adapter.h:116
InternalInterface * internal()
Definition: adapter.h:233
static awareness::ProxyBuilder * proxy_builder()
Definition: adapter.h:228
static void initClassInternal(ConfClass *conf_class)
Definition: adapter.h:142
Definition: adapter.h:293
static void initClassInternal(ConfClass *conf_class)
Definition: adapter.h:298
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:69
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:340
void initGasketClasses(const char *module_name)