SystemC Library API Reference Manual
Reference documentation for the Simics SystemC Library.
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
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 virtual 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) {
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 virtual 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) {
55 simics::systemc::Context context(proxy->simulation());
57 start_phase_[std::make_pair(proxy, trans)], *phase, *delay, *ret);
58 }
59 virtual void b_transport_pre(scla::ProxyInterface *proxy,
60 tlm::tlm_generic_payload *trans,
61 sc_core::sc_time *delay) {
62 simics::systemc::Context context(proxy->simulation());
63 checker(proxy).b_transport_pre_checks(*trans, *delay);
64 }
65
66 virtual void b_transport_post(scla::ProxyInterface *proxy,
67 tlm::tlm_generic_payload *trans,
68 sc_core::sc_time *delay) {
69 simics::systemc::Context context(proxy->simulation());
70 checker(proxy).b_transport_post_checks(*trans, *delay);
71 }
72 virtual void get_direct_mem_ptr_pre(scla::ProxyInterface *proxy,
73 tlm::tlm_generic_payload *trans,
74 tlm::tlm_dmi *dmi_data) {
75 simics::systemc::Context context(proxy->simulation());
76 checker(proxy).get_direct_mem_ptr_pre_checks(*trans, *dmi_data);
77 }
78 virtual void get_direct_mem_ptr_post(scla::ProxyInterface *proxy,
79 tlm::tlm_generic_payload *trans,
80 tlm::tlm_dmi *dmi_data,
81 bool *ret) {
82 simics::systemc::Context context(proxy->simulation());
83 checker(proxy).get_direct_mem_ptr_post_checks(*trans, *dmi_data);
84 }
85 virtual void transport_dbg_pre(scla::ProxyInterface *proxy,
86 tlm::tlm_generic_payload *trans) {
87 simics::systemc::Context context(proxy->simulation());
88 checker(proxy).transport_dbg_pre_checks(*trans);
89 }
90
91 virtual void transport_dbg_post(scla::ProxyInterface *proxy,
92 tlm::tlm_generic_payload *trans,
93 unsigned int *ret) {
94 simics::systemc::Context context(proxy->simulation());
95 checker(proxy).transport_dbg_post_checks(*trans, *ret);
96 }
97 virtual 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) {
101 simics::systemc::Context context(proxy->simulation());
102 checker(proxy).nb_transport_bw_pre_checks(*trans, *phase, *delay);
103 }
104 virtual 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) {
109 simics::systemc::Context context(proxy->simulation());
110 checker(proxy).nb_transport_bw_post_checks(*trans, *phase, *delay,
111 *ret);
112 }
113 virtual void invalidate_direct_mem_ptr_pre(scla::ProxyInterface *proxy,
114 sc_dt::uint64 *start_range,
115 sc_dt::uint64 *end_range) {
116 }
117 virtual void invalidate_direct_mem_ptr_post(scla::ProxyInterface *proxy,
118 sc_dt::uint64 *start_range,
119 sc_dt::uint64 *end_range) {
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:31
Definition: sc_protocol_checker_tool.h:32
static void initialize(const std::string &module_name)
virtual void b_transport_pre(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, sc_core::sc_time *delay)
Definition: sc_protocol_checker_tool.h:59
virtual void invalidate_direct_mem_ptr_pre(scla::ProxyInterface *proxy, sc_dt::uint64 *start_range, sc_dt::uint64 *end_range)
Definition: sc_protocol_checker_tool.h:113
virtual void nb_transport_fw_pre(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, tlm::tlm_phase *phase, sc_core::sc_time *delay)
Definition: sc_protocol_checker_tool.h:42
virtual void transport_dbg_pre(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans)
Definition: sc_protocol_checker_tool.h:85
ScProtocolCheckerTool(simics::ConfObjectRef o)
Definition: sc_protocol_checker_tool.h:34
virtual void nb_transport_bw_pre(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, tlm::tlm_phase *phase, sc_core::sc_time *delay)
Definition: sc_protocol_checker_tool.h:97
virtual void get_direct_mem_ptr_post(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, tlm::tlm_dmi *dmi_data, bool *ret)
Definition: sc_protocol_checker_tool.h:78
tlm_utils::tlm2_base_protocol_checker & checker(scla::ProxyInterface *proxy)
Definition: sc_protocol_checker_tool.h:121
virtual void transport_dbg_post(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, unsigned int *ret)
Definition: sc_protocol_checker_tool.h:91
virtual void get_direct_mem_ptr_pre(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, tlm::tlm_dmi *dmi_data)
Definition: sc_protocol_checker_tool.h:72
virtual ~ScProtocolCheckerTool()
Definition: sc_protocol_checker_tool.h:35
virtual void invalidate_direct_mem_ptr_post(scla::ProxyInterface *proxy, sc_dt::uint64 *start_range, sc_dt::uint64 *end_range)
Definition: sc_protocol_checker_tool.h:117
virtual 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)
Definition: sc_protocol_checker_tool.h:50
virtual 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)
Definition: sc_protocol_checker_tool.h:104
virtual void b_transport_post(scla::ProxyInterface *proxy, tlm::tlm_generic_payload *trans, sc_core::sc_time *delay)
Definition: sc_protocol_checker_tool.h:66
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: pci_bus_interface.h:24