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