File simulatormodule.cpp¶
Callback Handling
Handle a callback coming from GPI
GILState before calling: Unknown
GILState after calling: Unknown
Makes one call to TAKE_GIL and one call to DROP_GIL
Returns 0 on success or 1 on a failure.
Handles a callback from the simulator, all of which call this function.
We extract the associated context and find the Python function (usually cocotb.scheduler.react) calling it with a reference to the trigger that fired. The scheduler can then call next() on all the coroutines that are waiting on that particular trigger.
TODO:
Tidy up return values
Ensure cleanup correctly in exception cases
-
struct PyModuleDef
moduledef= {PyModuleDef_HEAD_INIT, MODULE_NAME, NULL, -1, SimulatorMethods, NULL, NULL, NULL, NULL}¶
-
PyMethodDef
gpi_sim_hdl_methods[]¶
-
PyMethodDef gpi_cb_hdl_methods [] = { {"deregister", (PyCFunction)deregister, METH_NOARGS, PyDoc_STR( "deregister($self)\n" "--\n\n" "deregister() -> None\n" "De-register this callback." )}, {NULL, NULL, 0, NULL} }
-
int
handle_gpi_callback(void *user_data)¶
-
PyObject *
log_msg(PyObject *self, PyObject *args)¶
-
callback_data *
callback_data_new(PyObject *func, PyObject *args, PyObject *kwargs)¶
-
PyObject *
register_readonly_callback(PyObject *self, PyObject *args)¶
-
PyObject *
register_rwsynch_callback(PyObject *self, PyObject *args)¶
-
PyObject *
register_nextstep_callback(PyObject *self, PyObject *args)¶
-
PyObject *
register_timed_callback(PyObject *self, PyObject *args)¶
-
PyObject *
register_value_change_callback(PyObject *self, PyObject *args)¶
-
PyObject *
iterate(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
next(gpi_hdl_Object<gpi_iterator_hdl> *self)¶
-
PyObject *
get_signal_val_binstr(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_signal_val_str(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_signal_val_real(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_signal_val_long(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
set_signal_val_binstr(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
set_signal_val_str(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
set_signal_val_real(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
set_signal_val_long(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_definition_name(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_definition_file(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_handle_by_name(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_handle_by_index(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_root_handle(PyObject *self, PyObject *args)¶
-
PyObject *
get_name_string(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_type(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_const(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_type_string(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
is_running(PyObject *self, PyObject *args)¶
-
PyObject *
get_sim_time(PyObject *self, PyObject *args)¶
-
PyObject *
get_precision(PyObject *self, PyObject *args)¶
-
PyObject *
get_simulator_product(PyObject *m, PyObject *args)¶
-
PyObject *
get_simulator_version(PyObject *m, PyObject *args)¶
-
PyObject *
get_num_elems(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
get_range(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *args)¶
-
PyObject *
stop_simulator(PyObject *self, PyObject *args)¶
-
PyObject *
deregister(gpi_hdl_Object<gpi_cb_hdl> *self, PyObject *args)¶
-
PyObject *
log_level(PyObject *self, PyObject *args)¶
-
int
add_module_constants(PyObject *simulator)¶
-
int
add_module_types(PyObject *simulator)¶
-
PyMODINIT_FUNC
PyInit_simulator(void)¶
Typedefs
-
typedef int (*
gpi_function_t)(const void*)¶
-
struct
sim_time¶