16#ifndef SIMICS_SYSTEMC_SIMULATION_H
17#define SIMICS_SYSTEMC_SIMULATION_H
21#include <simics/base/iface-call.h>
23#include <simics/devs/frequency.h>
24#include <simics/model-iface/event-delta.h>
25#include <simics/model-iface/co-execute.h>
66 virtual uint64
set_delta(conf_object_t *NOTNULL event_handler_obj,
67 const event_class_t *next_event_ec,
69 virtual uint64
get_delta(conf_object_t *NOTNULL event_handler_obj);
72 virtual double get()
const;
76 unsigned group_index);
98 return time_resolution_;
113 int runDeltaPhaseNoStateCheck(
int count);
114 bool isPausePending();
115 bool hasPendingAsyncActivity()
const;
116 bool runSimulationNoCallHandleEvent(sc_core::sc_time t);
118 static void atSimulationStopped(lang_void *simulation, conf_object_t *obj);
119 static std::vector<conf_object_t*> instancesNotInCell(conf_object_t *cell);
120 static void onCellChange(lang_void *callback_data, conf_object_t *obj,
121 conf_object_t *old_cell, conf_object_t *new_cell);
124 struct InstanceTracker {
125 explicit InstanceTracker(conf_object_t *NOTNULL
object);
126 virtual ~InstanceTracker();
127 conf_object_t *object_;
129 static std::vector<conf_object_t*> instances_;
131 class YieldRequest :
public sc_core::sc_prim_channel {
133 YieldRequest(conf_object_t *co_execute,
const char* name)
134 :
sc_core::sc_prim_channel(name) {
135 INIT_IFACE(&execute_, execute, co_execute);
137 virtual void update(
void) {
139 CALL(execute_,
stop)();
141 IFACE_OBJ(execute) execute_;
144 ConfObjectRef simics_object_;
145 SimulationDeleter *simulation_deleter_;
148 sc_core::sc_time sc_time_when_set_delta_;
149 IFACE_OBJ(event_handler) event_handler_;
150 concurrency_mode_t concurrency_mode_;
151 YieldRequest yield_request_;
153 InternalInterface *internal_;
154 InstanceTracker instance_tracker_;
159 uint64_t time_resolution_;
Definition: internal_interface.h:25
Provides the interface to the SystemC kernel.
Definition: simulation.h:54
virtual void switch_mode(concurrency_mode_t mode)
sc_core::sc_simcontext * context() const
uint64_t get_sc_time_resolution() const
Definition: simulation.h:97
virtual std::vector< conf_object_t * > execution_group(unsigned group_index)
virtual uint64 get_delta(conf_object_t *NOTNULL event_handler_obj)
void set_sc_time_resolution(uint64_t time_resolution)
virtual void callHandleEvent()
virtual uint64 set_delta(conf_object_t *NOTNULL event_handler_obj, const event_class_t *next_event_ec, uint64 delta)
int runDeltaPhase(int count)
virtual void yield_request()
virtual concurrency_mode_t supported_modes()
void set_run_next_delta(const int &count)
virtual std::vector< conf_object_t * > serialized_memory_group(unsigned group_index)
virtual double get() const
virtual void message_pending()
ConfObjectRef simics_object() const
Simulation(ConfObjectRef o, InternalInterface *internal)
bool runSimulation(sc_core::sc_time t)
void set_frequency(double frequency)
virtual concurrency_mode_t current_mode()
const std::vector< conf_object_t * > & instances() const
virtual void switch_out()
Simics concurrency group interface.
Definition: concurrency_group_interface.h:28
Simics concurrency mode interface.
Definition: concurrency_mode_interface.h:26
Definition: event_delta_interface.h:27
Simics execute control interface.
Definition: execute_control_interface.h:26
Definition: execute_interface.h:24
Definition: frequency_interface.h:26
Interface to the SystemC simulation.
Definition: simulation_interface.h:27
Definition: argument_registry.h:26