14#ifndef SIMICS_SYSTEMC_SIMULATION_H
15#define SIMICS_SYSTEMC_SIMULATION_H
19#include <simics/base/iface-call.h>
21#include <simics/devs/frequency.h>
22#include <simics/model-iface/event-delta.h>
23#include <simics/model-iface/co-execute.h>
64 uint64
set_delta(conf_object_t *NOTNULL event_handler_obj,
65 const event_class_t *next_event_ec,
66 uint64 delta)
override;
67 uint64
get_delta(conf_object_t *NOTNULL event_handler_obj)
override;
70 double get()
const override;
74 unsigned group_index)
override;
90 sc_core::sc_simcontext*
context()
const override;
97 return time_resolution_;
108 int runDeltaPhaseNoStateCheck(
int count);
109 bool isPausePending();
110 bool hasPendingAsyncActivity()
const;
111 bool runSimulationNoCallHandleEvent(
const sc_core::sc_time &t);
113 static void atSimulationStopped(lang_void *simulation, conf_object_t *obj);
114 static std::vector<conf_object_t*> instancesNotInCell(conf_object_t *cell);
115 static void onCellChange(lang_void *callback_data, conf_object_t *obj,
116 conf_object_t *old_cell, conf_object_t *new_cell);
119 struct InstanceTracker {
120 explicit InstanceTracker(conf_object_t *NOTNULL
object);
121 virtual ~InstanceTracker();
122 conf_object_t *object_;
124 static std::vector<conf_object_t*> instances_;
126 class YieldRequest :
public sc_core::sc_prim_channel {
128 YieldRequest(conf_object_t *co_execute,
const char* name)
129 :
sc_core::sc_prim_channel(name) {
130 INIT_IFACE(&execute_, execute, co_execute);
132 void update(
void)
override {
134 CALL(execute_,
stop)();
136 IFACE_OBJ(execute) execute_;
139 ConfObjectRef simics_object_;
140 SimulationDeleter *simulation_deleter_;
143 sc_core::sc_time sc_time_when_set_delta_;
144 IFACE_OBJ(event_handler) event_handler_;
145 concurrency_mode_t concurrency_mode_;
146 YieldRequest yield_request_;
148 InternalInterface *internal_;
149 InstanceTracker instance_tracker_;
154 uint64_t time_resolution_;
158 bool sc_time_stamp_changed_ {
false};
Definition: internal_interface.h:23
Provides the interface to the SystemC kernel.
Definition: simulation.h:52
bool runSimulation(sc_core::sc_time t) override
ConfObjectRef simics_object() const override
uint64_t get_sc_time_resolution() const
Definition: simulation.h:96
void switch_mode(concurrency_mode_t mode) override
void set_sc_time_resolution(uint64_t time_resolution)
uint64 set_delta(conf_object_t *NOTNULL event_handler_obj, const event_class_t *next_event_ec, uint64 delta) override
virtual void callHandleEvent()
double get() const override
int runDeltaPhase(int count) override
void yield_request() override
void switch_in() override
sc_core::sc_simcontext * context() const override
concurrency_mode_t supported_modes() override
void set_run_next_delta(int count)
concurrency_mode_t current_mode() override
void switch_out() override
uint64 get_delta(conf_object_t *NOTNULL event_handler_obj) override
Simulation(ConfObjectRef o, InternalInterface *internal)
void set_frequency(double frequency)
std::vector< conf_object_t * > execution_group(unsigned group_index) override
void message_pending() override
void stopSimulation() override
const std::vector< conf_object_t * > & instances() const
std::vector< conf_object_t * > serialized_memory_group(unsigned group_index) override
Simics concurrency group interface.
Definition: concurrency_group_interface.h:26
Simics concurrency mode interface.
Definition: concurrency_mode_interface.h:24
Definition: event_delta_interface.h:25
Simics execute control interface.
Definition: execute_control_interface.h:24
Definition: execute_interface.h:22
Definition: frequency_interface.h:24
Interface to the SystemC simulation.
Definition: simulation_interface.h:25
Definition: argument_registry.h:24