quic/qbox
Loading...
Searching...
No Matches
python_binder.h
1/*
2 * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef _GREENSOCS_PYTHON_BINDER_DMI_H
8#define _GREENSOCS_PYTHON_BINDER_DMI_H
9
18#include <cci_configuration>
19#include <systemc>
20#include <tlm>
21#include <scp/report.h>
22#include <scp/helpers.h>
23#include <tlm_utils/simple_initiator_socket.h>
24#include <tlm_utils/simple_target_socket.h>
25#include <ports/initiator-signal-socket.h>
26#include <ports/target-signal-socket.h>
27#include <ports/biflow-socket.h>
28#include <tlm_sockets_buswidth.h>
29#include <libgssync.h>
30#include <pybind11/pybind11.h>
31#include <pybind11/numpy.h>
32
33namespace gs {
34
36{
37private:
39
40public:
41 static void init();
42
44 void operator=(PyInterpreterManager const&) = delete;
45
47};
48
49template <unsigned int BUSWIDTH = DEFAULT_TLM_BUSWIDTH>
50class python_binder : public sc_core::sc_module
51{
52 SCP_LOGGER();
54 using tlm_initiator_socket_t = tlm_utils::simple_initiator_socket_b<MOD, BUSWIDTH, tlm::tlm_base_protocol_types,
55 sc_core::SC_ZERO_OR_MORE_BOUND>;
56 using tlm_target_socket_t = tlm_utils::simple_target_socket_tagged_b<MOD, BUSWIDTH, tlm::tlm_base_protocol_types,
57 sc_core::SC_ZERO_OR_MORE_BOUND>;
58
59public:
60 python_binder(const sc_core::sc_module_name& nm);
61
63
64private:
65 void init_binder();
66
67 void setup_biflow_socket(pybind11::object& _modules);
68
69 void do_b_transport(int id, pybind11::object& py_trans, pybind11::object& py_delay);
70
71 void b_transport(int id, tlm::tlm_generic_payload& trans, sc_core::sc_time& delay);
72
73 void bf_b_transport(tlm::tlm_generic_payload& txn, sc_core::sc_time& delay);
74
75 unsigned int transport_dbg(int id, tlm::tlm_generic_payload& trans);
76
77 bool get_direct_mem_ptr(int id, tlm::tlm_generic_payload& trans, tlm::tlm_dmi& dmi_data);
78
79 void invalidate_direct_mem_ptr(sc_dt::uint64 start, sc_dt::uint64 end);
80
81 void exec_if_py_fn_exist(const char* fn_name);
82
83 void before_end_of_elaboration() override;
84
85 void end_of_elaboration() override;
86
87 void start_of_simulation() override;
88
89 void end_of_simulation() override;
90
91 void target_signal_cb(int id, bool value);
92
93public:
94 cci::cci_param<std::string> p_py_mod_name;
95 cci::cci_param<std::string> p_py_mod_dir;
96 cci::cci_param<std::string> p_py_mod_args;
97 cci::cci_param<std::string> p_py_mod_current_mod_id_prefix;
98 cci::cci_param<uint32_t> p_tlm_initiator_ports_num;
99 cci::cci_param<uint32_t> p_tlm_target_ports_num;
100 cci::cci_param<uint32_t> p_initiator_signals_num;
101 cci::cci_param<uint32_t> p_target_signals_num;
102 cci::cci_param<uint32_t> p_bf_socket_num;
103 sc_core::sc_vector<tlm_initiator_socket_t> initiator_sockets;
104 sc_core::sc_vector<tlm_target_socket_t> target_sockets;
105 sc_core::sc_vector<InitiatorSignalSocket<bool>> initiator_signal_sockets;
106 sc_core::sc_vector<TargetSignalSocket<bool>> target_signal_sockets;
107 sc_core::sc_vector<gs::biflow_socket<python_binder<BUSWIDTH>>> bf_socket;
108
109private:
110 pybind11::module_ m_main_mod;
111 pybind11::module_ m_tlm_do_b_transport_mod;
112 pybind11::module_ m_biflow_socket_mod;
113 pybind11::module_ m_initiator_signal_socket_mod;
114 pybind11::module_ m_cpp_shared_vars_mod;
115};
116} // namespace gs
117
118extern "C" void module_register();
119
120#endif
Definition target.h:160
Definition python_binder.h:36
Definition python_binder.h:51
Tool which reads a Lua configuration file and sets parameters.
Definition biflow.cc:10