quic/qbox
Loading...
Searching...
No Matches
inlinesync.h
1/*
2 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
3 * Author: GreenSocs 2022
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8#ifndef INLINESYNC_H
9#define INLINESYNC_H
10
11#include <systemc>
12#include <tlm>
13#include "tlm_utils/simple_target_socket.h"
14#include "tlm_utils/simple_initiator_socket.h"
15
16#include <runonsysc.h>
17#include <tlm_sockets_buswidth.h>
18#include <module_factory_registery.h>
19
20namespace gs {
21class inlinesync : public sc_core::sc_module
22{
23 runonsysc onSystemC;
24 void run_on_sysc(std::function<void()> job) { onSystemC.run_on_sysc(job, true); }
25
26public:
27 tlm_utils::simple_target_socket<inlinesync, DEFAULT_TLM_BUSWIDTH> target_socket;
28 tlm_utils::simple_initiator_socket<inlinesync, DEFAULT_TLM_BUSWIDTH> initiator_socket;
29
30 inlinesync(const sc_core::sc_module_name& name)
31 : sc_module(name), onSystemC(), target_socket("targetSocket"), initiator_socket("initiatorSocket")
32 {
33 target_socket.register_b_transport(this, &inlinesync::b_transport);
34 initiator_socket.register_invalidate_direct_mem_ptr(this, &inlinesync::invalidate_direct_mem_ptr);
35 }
36
37 void b_transport(tlm::tlm_generic_payload& trans, sc_core::sc_time& delay)
38 {
39 run_on_sysc([this, &trans, &delay]() {
40 sc_core::sc_unsuspendable();
41 initiator_socket->b_transport(trans, delay);
42 sc_core::sc_suspendable();
43 });
44 }
45
46 void get_direct_mem_ptr(tlm::tlm_generic_payload& trans, tlm::tlm_dmi& dmi_data)
47 {
48 run_on_sysc([this, &trans, &dmi_data]() { initiator_socket->get_direct_mem_ptr(trans, dmi_data); });
49 }
50 void transport_dgb(tlm::tlm_generic_payload& trans)
51 {
52 run_on_sysc([this, &trans]() { initiator_socket->transport_dbg(trans); });
53 }
54 void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, sc_dt::uint64 end_range)
55 {
56 // This would be better as run_on_initiator
57 target_socket->invalidate_direct_mem_ptr(start_range, end_range);
58 }
59};
60
61} // namespace gs
62
63#endif // INLINESYNC_H
Definition target.h:160
Definition inlinesync.h:22
Definition runonsysc.h:22
bool run_on_sysc(std::function< void()> job_entry, bool wait=true)
Run a job on the SystemC kernel thread.
Definition runonsysc.h:181
Tool which reads a Lua configuration file and sets parameters.
Definition biflow.cc:10