SystemC Library API Reference Manual
Reference documentation for the Simics SystemC Library.
 
Loading...
Searching...
No Matches
sc_protocol_checker_tool.h
Go to the documentation of this file.
1/*
2 © 2016 Intel Corporation
3
4 This software and the related documents are Intel copyrighted materials, and
5 your use of them is governed by the express license under which they were
6 provided to you ("License"). Unless the License provides otherwise, you may
7 not use, modify, copy, publish, distribute, disclose or transmit this software
8 or the related documents without Intel's prior written permission.
9
10 This software and the related documents are provided as is, with no express or
11 implied warranties, other than those that are expressly stated in the License.
12*/
13
14#ifndef SIMICS_SYSTEMC_TOOLS_SC_PROTOCOL_CHECKER_TOOL_H
15#define SIMICS_SYSTEMC_TOOLS_SC_PROTOCOL_CHECKER_TOOL_H
16
20
21#include <map>
22#include <string>
23#include <utility>
24#include <vector>
25
26namespace simics {
27namespace systemc {
28namespace tools {
29
31 public:
32 explicit ScProtocolCheckerTool(simics::ConfObjectRef o) : ScTool(o) {}
34 for (auto &entry : checkers_)
35 delete entry.second;
36 }
37
38 void nb_transport_fw_pre(scla::ProxyInterface *proxy,
39 tlm::tlm_generic_payload *trans,
40 tlm::tlm_phase *phase,
41 sc_core::sc_time *delay) override {
42 simics::systemc::Context context(proxy->simulation());
43 start_phase_[std::make_pair(proxy, trans)] = *phase;
44 checker(proxy).nb_transport_fw_pre_checks(*trans, *phase, *delay);
45 }
46 void nb_transport_fw_post(scla::ProxyInterface *proxy,
47 tlm::tlm_generic_payload *trans,
48 tlm::tlm_phase *phase,
49 sc_core::sc_time *delay,
50 tlm::tlm_sync_enum *ret) override {
51 simics::systemc::Context context(proxy->simulation());
53 start_phase_[std::make_pair(proxy, trans)], *phase, *delay, *ret);
54 }
55 void b_transport_pre(scla::ProxyInterface *proxy,
56 tlm::tlm_generic_payload *trans,
57 sc_core::sc_time *delay) override {
58 simics::systemc::Context context(proxy->simulation());
59 checker(proxy).b_transport_pre_checks(*trans, *delay);
60 }
61
62 void b_transport_post(scla::ProxyInterface *proxy,
63 tlm::tlm_generic_payload *trans,
64 sc_core::sc_time *delay) override {
65 simics::systemc::Context context(proxy->simulation());
66 checker(proxy).b_transport_post_checks(*trans, *delay);
67 }
68 void get_direct_mem_ptr_pre(scla::ProxyInterface *proxy,
69 tlm::tlm_generic_payload *trans,
70 tlm::tlm_dmi *dmi_data) override {
71 simics::systemc::Context context(proxy->simulation());
72 checker(proxy).get_direct_mem_ptr_pre_checks(*trans, *dmi_data);
73 }
74 void get_direct_mem_ptr_post(scla::ProxyInterface *proxy,
75 tlm::tlm_generic_payload *trans,
76 tlm::tlm_dmi *dmi_data,
77 bool *ret) override {
78 simics::systemc::Context context(proxy->simulation());
79 checker(proxy).get_direct_mem_ptr_post_checks(*trans, *dmi_data);
80 }
81 void transport_dbg_pre(scla::ProxyInterface *proxy,
82 tlm::tlm_generic_payload *trans) override {
83 simics::systemc::Context context(proxy->simulation());
84 checker(proxy).transport_dbg_pre_checks(*trans);
85 }
86
87 void transport_dbg_post(scla::ProxyInterface *proxy,
88 tlm::tlm_generic_payload *trans,
89 unsigned int *ret) override {
90 simics::systemc::Context context(proxy->simulation());
91 checker(proxy).transport_dbg_post_checks(*trans, *ret);
92 }
93 void nb_transport_bw_pre(scla::ProxyInterface *proxy,
94 tlm::tlm_generic_payload *trans,
95 tlm::tlm_phase *phase,
96 sc_core::sc_time *delay) override {
97 simics::systemc::Context context(proxy->simulation());
98 checker(proxy).nb_transport_bw_pre_checks(*trans, *phase, *delay);
99 }
100 void nb_transport_bw_post(scla::ProxyInterface *proxy,
101 tlm::tlm_generic_payload *trans,
102 tlm::tlm_phase *phase,
103 sc_core::sc_time *delay,
104 tlm::tlm_sync_enum *ret) override {
105 simics::systemc::Context context(proxy->simulation());
106 checker(proxy).nb_transport_bw_post_checks(*trans, *phase, *delay,
107 *ret);
108 }
109 void invalidate_direct_mem_ptr_pre(scla::ProxyInterface *proxy,
110 sc_dt::uint64 *start_range,
111 sc_dt::uint64 *end_range) override {
112 }
113 void invalidate_direct_mem_ptr_post(scla::ProxyInterface *proxy,
114 sc_dt::uint64 *start_range,
115 sc_dt::uint64 *end_range) override {
116 }
118 scla::ProxyInterface *proxy) {
119 auto i = checkers_.find(proxy);
120 if (i == checkers_.end()) {
121 i = checkers_.emplace(
122 proxy, new tlm_utils::tlm2_base_protocol_checker(proxy)).first;
123 }
124
125 return *i->second;
126 }
127 static void initialize(const std::string &module_name);
128
129 private:
130 std::map<scla::ProxyInterface *,
132 std::map<std::pair<scla::ProxyInterface *, tlm::tlm_generic_payload *>,
133 tlm::tlm_phase> start_phase_;
134};
135
136} // namespace tools
137} // namespace systemc
138} // namespace simics
139
140#endif
Utility class that handles the context switching, using RAII methodology.
Definition: context.h:31
Definition: sc_protocol_checker_tool.h:30
static void initialize(const std::string &module_name)
void nb_transport_bw_pre(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, tlm::tlm_phase *phase, sc_core::sc_time *delay) override
Definition: sc_protocol_checker_tool.h:93
ScProtocolCheckerTool(simics::ConfObjectRef o)
Definition: sc_protocol_checker_tool.h:32
void b_transport_pre(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, sc_core::sc_time *delay) override
Definition: sc_protocol_checker_tool.h:55
void get_direct_mem_ptr_post(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, tlm::tlm_dmi *dmi_data, bool *ret) override
Definition: sc_protocol_checker_tool.h:74
tlm_utils::tlm2_base_protocol_checker & checker(scla::ProxyInterface *proxy)
Definition: sc_protocol_checker_tool.h:117
void nb_transport_fw_pre(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, tlm::tlm_phase *phase, sc_core::sc_time *delay) override
Definition: sc_protocol_checker_tool.h:38
virtual ~ScProtocolCheckerTool()
Definition: sc_protocol_checker_tool.h:33
void nb_transport_bw_post(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, tlm::tlm_phase *phase, sc_core::sc_time *delay, tlm::tlm_sync_enum *ret) override
Definition: sc_protocol_checker_tool.h:100
void transport_dbg_pre(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans) override
Definition: sc_protocol_checker_tool.h:81
void get_direct_mem_ptr_pre(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, tlm::tlm_dmi *dmi_data) override
Definition: sc_protocol_checker_tool.h:68
void nb_transport_fw_post(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, tlm::tlm_phase *phase, sc_core::sc_time *delay, tlm::tlm_sync_enum *ret) override
Definition: sc_protocol_checker_tool.h:46
void b_transport_post(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, sc_core::sc_time *delay) override
Definition: sc_protocol_checker_tool.h:62
void transport_dbg_post(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, unsigned int *ret) override
Definition: sc_protocol_checker_tool.h:87
void invalidate_direct_mem_ptr_pre(scla::ProxyInterface *proxy, sc_dt::uint64 *start_range, sc_dt::uint64 *end_range) override
Definition: sc_protocol_checker_tool.h:109
void invalidate_direct_mem_ptr_post(scla::ProxyInterface *proxy, sc_dt::uint64 *start_range, sc_dt::uint64 *end_range) override
Definition: sc_protocol_checker_tool.h:113
Definition: sc_tool.h:49
Definition: tlm2_base_protocol_checker.h:134
void transport_dbg_pre_checks(tlm::tlm_generic_payload &trans)
void nb_transport_fw_pre_checks(tlm::tlm_generic_payload &trans, tlm::tlm_phase &phase, sc_core::sc_time &delay)
void b_transport_pre_checks(tlm::tlm_generic_payload &trans, sc_core::sc_time &delay)
void nb_transport_fw_post_checks(tlm::tlm_generic_payload &trans, tlm::tlm_phase &start_phase, tlm::tlm_phase &phase, sc_core::sc_time &delay, tlm::tlm_sync_enum status)
void get_direct_mem_ptr_post_checks(tlm::tlm_generic_payload &trans, tlm::tlm_dmi &dmi_data)
void b_transport_post_checks(tlm::tlm_generic_payload &trans, sc_core::sc_time &delay)
void transport_dbg_post_checks(tlm::tlm_generic_payload &trans, unsigned int count)
void nb_transport_bw_post_checks(tlm::tlm_generic_payload &trans, tlm::tlm_phase &phase, sc_core::sc_time &delay, tlm::tlm_sync_enum status)
void get_direct_mem_ptr_pre_checks(tlm::tlm_generic_payload &trans, tlm::tlm_dmi &dmi_data)
void nb_transport_bw_pre_checks(tlm::tlm_generic_payload &trans, tlm::tlm_phase &phase, sc_core::sc_time &delay)
Definition: adapter.h:79