The Sparta Modeling Framework
Loading...
Searching...
No Matches
SpartaTLMTargetGasket.hpp
1#pragma once
2
3#include <cinttypes>
9#include "MemoryRequest.hpp"
10#include "tlm.h"
11#include "tlm_utils/peq_with_get.h" // Payload event queue FIFO
12#include "memory.h"
13
14
15namespace sparta_target
16{
17
19 public sc_core::sc_module,
20 public tlm::tlm_fw_transport_if<>
21 {
22 protected:
23 static int nextID;
24
25 public:
26 static constexpr char name[] = "mem_tlm_gasket";
27 static constexpr char scName[2][20] = {"mem_tlm_gasket0", "mem_tlm_gasket1"};
28
36
63 const SpartaTLMTargetGasketParams * params,
64 sc_core::sc_module_name module_name = scName[nextID]) :
65 Unit(node),
66 sc_module(module_name),
67 ID_ (nextID),
68 target_memory_(
69 nextID
70 , sc_core::sc_time(50, sc_core::SC_NS) // read response delay
71 , sc_core::sc_time(30, sc_core::SC_NS) // write response delay)
72 , 4*1024 // memory size (bytes)
73 , 4 // memory width (bytes)
74 ),
75 accept_delay_(sc_core::sc_time(0, sc_core::SC_NS))
76 {
77 setAutoPrecedence(false);
78 // This confusing call binds this TLM socket's
79 // tlm_fw_transport_if API to this class for
80 // nb_transport_fw calls. The nb_transport_bw call
81 // remains unset.
82 nextID++;
83 memory_socket_(*this);
84
85 // Register the callback for finished transactions coming
86 // from the Sparta Memory model
87 in_memory_response_.registerConsumerHandler
89 forwardMemoryResponse_, MemoryRequest));
90 }
91
92 void setTreeNode(sparta::TreeNode *treeNodePtr);
93
94 tlm::tlm_target_socket<> & getMemorySocket() { return memory_socket_; }
95
96 private:
97
98 tlm::tlm_target_socket<> memory_socket_;
99
100 const unsigned int ID_;
101 memory target_memory_;
102 sc_core::sc_time accept_delay_;
103 // Nothing should call this function directly. Should be done
104 // through the tlm::tlm_fw_transport_if<> pointer
105 tlm::tlm_sync_enum nb_transport_fw (tlm::tlm_generic_payload &gp,
106 tlm::tlm_phase &phase ,
107 sc_core::sc_time &delay_time ) override final;
108
109 sparta::DataInPort<MemoryRequest> in_memory_response_ {getPortSet(), "in_memory_response"};
110 sparta::DataOutPort<MemoryRequest> out_memory_request_ {getPortSet(), "out_memory_request"};
111 void send_end_request_(const MemoryRequest &);
112 void forwardMemoryResponse_(const MemoryRequest &);
113 unsigned long request_count_;
114 bool nb_trans_fw_prev_warning_;
115 bool begin_resp_method_prev_warning_;
116 bool trans_dbg_prev_warning_;
117 bool get_dm_ptr_prev_warning_;
118
119 // An event to be scheduled in the
120 // sparta::SchedulingPhase::Tick phase if data is received
122 {getEventSet(), "end_req_event",
123 CREATE_SPARTA_HANDLER_WITH_DATA(SpartaTLMTargetGasket, send_end_request_, MemoryRequest)};
124
125 // Not needed methods
126
128 void b_transport(tlm::tlm_generic_payload &payload, sc_core::sc_time &delay_time) override { }
129
131 bool get_direct_mem_ptr(tlm::tlm_generic_payload &payload, tlm::tlm_dmi &dmi_data) override
132 { return false; }
133
135 unsigned int transport_dbg(tlm::tlm_generic_payload &payload) override { return 0; }
136
137
138 };
139}
File that defines Data[In,Out]Port<DataT>
A set of sparta::Parameters per sparta::ResourceTreeNode.
File that defines the PayloadEvent class.
#define CREATE_SPARTA_HANDLER_WITH_DATA(clname, meth, dataT)
Basic Node framework in sparta device tree composite pattern.
File that defines the Unit class, a common grouping of sets and loggers.
DataInPort receives data from sender using a DataOutPort.
Definition DataPort.hpp:289
DataOutPort is used for transferring any data to another module.
Definition DataPort.hpp:77
Generic container of Parameters.
Class to schedule a Scheduleable in the future with a payload, typed on both the data type and the sc...
Node in a composite tree representing a sparta Tree item.
Definition TreeNode.hpp:205
The is the base class for user defined blocks in simulation.
Definition Unit.hpp:38
Unit(TreeNode *rc, const std::string &name)
Construct unit with a ResouceContainer.
Definition Unit.hpp:54
PortSet * getPortSet()
Return the port set.
Definition Unit.hpp:95
EventSet * getEventSet()
Return the event set.
Definition Unit.hpp:100
void setAutoPrecedence(bool auto_p)
Turn off auto-precedence.
Definition Unit.hpp:90
SC_HAS_PROCESS(SpartaTLMTargetGasket)
Construction of the Sparta TLM gasket.