rogue
Loading...
Searching...
No Matches
Slave.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_INTERFACES_MEMORY_SLAVE_H__
18#define __ROGUE_INTERFACES_MEMORY_SLAVE_H__
19#include "rogue/Directives.h"
20
21#include <stdint.h>
22
23#include <map>
24#include <memory>
25#include <string>
26#include <vector>
27
31
32#ifndef NO_PYTHON
33 #include <boost/python.hpp>
34#endif
35
36namespace rogue {
37namespace interfaces {
38namespace memory {
39
40class Master;
41class Transaction;
42
54class Slave : public rogue::EnableSharedFromThis<rogue::interfaces::memory::Slave> {
55 // Class instance counter
56 static uint32_t classIdx_;
57
58 // Class instance lock
59 static std::mutex classMtx_;
60
61 // Unique slave ID
62 uint32_t id_;
63
64 // Alias for map
65 typedef std::map<uint32_t, std::shared_ptr<rogue::interfaces::memory::Transaction> > TransactionMap;
66
67 // Transaction map
68 TransactionMap tranMap_;
69
70 // Slave lock
71 std::mutex slaveMtx_;
72
73 // Min access
74 uint32_t min_;
75
76 // Max access
77 uint32_t max_;
78
79 // Slave Name
80 std::string name_;
81
82 public:
101 static std::shared_ptr<rogue::interfaces::memory::Slave> create(uint32_t min, uint32_t max);
102
106 static void setup_python();
107
121 Slave(uint32_t min, uint32_t max);
122
126 virtual ~Slave();
127
135 virtual void stop();
136
149 void addTransaction(std::shared_ptr<rogue::interfaces::memory::Transaction> transaction);
150
166 std::shared_ptr<rogue::interfaces::memory::Transaction> getTransaction(uint32_t index);
167
175 uint32_t min();
176
184 uint32_t max();
185
193 uint32_t id();
194
202 void setName(std::string name);
203
211 std::string name();
212
223 virtual uint32_t doSlaveId();
224
235 virtual std::string doSlaveName();
236
246 virtual uint32_t doMinAccess();
247
257 virtual uint32_t doMaxAccess();
258
269 virtual uint64_t doAddress();
270
284 virtual void doTransaction(std::shared_ptr<rogue::interfaces::memory::Transaction> transaction);
285
286#ifndef NO_PYTHON
287
293 void lshiftPy(boost::python::object p);
294
295#endif
296
305 std::shared_ptr<rogue::interfaces::memory::Master>& operator<<(
306 std::shared_ptr<rogue::interfaces::memory::Master>& other);
307};
308
310typedef std::shared_ptr<rogue::interfaces::memory::Slave> SlavePtr;
311
312#ifndef NO_PYTHON
313
314// Memory slave class, wrapper to enable python overload of virtual methods
316 public boost::python::wrapper<rogue::interfaces::memory::Slave> {
317 public:
324 SlaveWrap(uint32_t min, uint32_t max);
325
333 uint32_t doMinAccess();
334
342 uint32_t defDoMinAccess();
343
351 uint32_t doMaxAccess();
352
360 uint32_t defDoMaxAccess();
361
369 uint64_t doAddress();
370
378 uint64_t defDoAddress();
379
387 void doTransaction(std::shared_ptr<rogue::interfaces::memory::Transaction> transaction);
388
396 void defDoTransaction(std::shared_ptr<rogue::interfaces::memory::Transaction> transaction);
397};
398
399typedef std::shared_ptr<rogue::interfaces::memory::SlaveWrap> SlaveWrapPtr;
400#endif
401
402} // namespace memory
403} // namespace interfaces
404} // namespace rogue
405
406#endif
Typed shared-from-this helper for Rogue classes.
uint32_t defDoMaxAccess()
Calls the base-class doMaxAccess() implementation.
Definition Slave.cpp:223
uint32_t doMaxAccess()
Returns maximum transaction access size.
Definition Slave.cpp:207
uint64_t defDoAddress()
Calls the base-class doAddress() implementation.
Definition Slave.cpp:244
uint32_t defDoMinAccess()
Calls the base-class doMinAccess() implementation.
Definition Slave.cpp:202
void defDoTransaction(std::shared_ptr< rogue::interfaces::memory::Transaction > transaction)
Calls the base-class doTransaction() implementation.
Definition Slave.cpp:266
uint64_t doAddress()
Returns base address contribution for this slave.
Definition Slave.cpp:228
void doTransaction(std::shared_ptr< rogue::interfaces::memory::Transaction > transaction)
Services a transaction request from an attached master.
Definition Slave.cpp:249
uint32_t doMinAccess()
Returns minimum transaction access size.
Definition Slave.cpp:186
Memory slave device.
Definition Slave.h:54
virtual std::string doSlaveName()
Services SlaveName request from a master.
Definition Slave.cpp:141
void setName(std::string name)
Sets slave name.
Definition Slave.cpp:131
std::string name()
Returns slave name.
Definition Slave.cpp:126
virtual uint64_t doAddress()
Services getAddress request from an attached master.
Definition Slave.cpp:156
virtual uint32_t doMaxAccess()
Services getMaxAccess request from an attached master.
Definition Slave.cpp:151
virtual uint32_t doMinAccess()
Services getMinAccess request from an attached master.
Definition Slave.cpp:146
std::shared_ptr< rogue::interfaces::memory::Master > & operator<<(std::shared_ptr< rogue::interfaces::memory::Master > &other)
Connects this slave to a master via chaining operator.
uint32_t id()
Returns unique slave ID.
Definition Slave.cpp:121
virtual uint32_t doSlaveId()
Services SlaveId request from a master.
Definition Slave.cpp:136
virtual void doTransaction(std::shared_ptr< rogue::interfaces::memory::Transaction > transaction)
Services a transaction request from an attached master.
Definition Slave.cpp:161
virtual ~Slave()
Destroys the memory slave instance.
Definition Slave.cpp:65
uint32_t max()
Returns configured maximum transaction size.
Definition Slave.cpp:116
static void setup_python()
Registers this type with Python bindings.
Definition Slave.cpp:165
static std::shared_ptr< rogue::interfaces::memory::Slave > create(uint32_t min, uint32_t max)
Creates a memory slave.
Definition Slave.cpp:45
virtual void stop()
Stops the memory slave interface.
Definition Slave.cpp:68
void addTransaction(std::shared_ptr< rogue::interfaces::memory::Transaction > transaction)
Adds a transaction to the internal tracking map.
Definition Slave.cpp:71
void lshiftPy(boost::python::object p)
Supports << operator usage from Python.
Definition Slave.cpp:270
std::shared_ptr< rogue::interfaces::memory::Transaction > getTransaction(uint32_t index)
Gets a transaction from the internal tracking map.
Definition Slave.cpp:78
uint32_t min()
Returns configured minimum transaction size.
Definition Slave.cpp:111
std::shared_ptr< rogue::interfaces::memory::Slave > SlavePtr
Shared pointer alias for Slave.
Definition Slave.h:310
std::shared_ptr< rogue::interfaces::memory::SlaveWrap > SlaveWrapPtr
Definition Slave.h:399