rogue
Loading...
Searching...
No Matches
Master.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_INTERFACES_MEMORY_MASTER_H__
18#define __ROGUE_INTERFACES_MEMORY_MASTER_H__
19#include "rogue/Directives.h"
20
21#include <stdint.h>
22
23#include <map>
24#include <memory>
25#include <string>
26#include <thread>
27#include <vector>
28
29#include "rogue/Logging.h"
30
31#ifndef NO_PYTHON
32 #include <boost/python.hpp>
33#endif
34
35namespace rogue {
36namespace interfaces {
37namespace memory {
38
39class Slave;
40class Transaction;
41
50class Master {
51 friend class Transaction;
52
53 private:
55 typedef std::map<uint32_t, std::shared_ptr<rogue::interfaces::memory::Transaction> > TransactionMap;
56
58 TransactionMap tranMap_;
59
61 std::shared_ptr<rogue::interfaces::memory::Slave> slave_;
62
64 struct timeval sumTime_;
65
67 std::mutex mastMtx_;
68
70 std::string error_;
71
73 std::shared_ptr<rogue::Logging> log_;
74
75 public:
87 static std::shared_ptr<rogue::interfaces::memory::Master> create();
88
90 static void setup_python();
91
99 Master();
100
102 virtual ~Master();
103
105 virtual void stop();
106
117 void setSlave(std::shared_ptr<rogue::interfaces::memory::Slave> slave);
118
126 std::shared_ptr<rogue::interfaces::memory::Slave> getSlave();
127
138 uint32_t reqSlaveId();
139
150 std::string reqSlaveName();
151
161 uint32_t reqMinAccess();
162
172 uint32_t reqMaxAccess();
173
183 uint64_t reqAddress();
184
192 std::string getError();
193
199 void clearError();
200
211 void setTimeout(uint64_t timeout);
212
228 uint32_t reqTransaction(uint64_t address, uint32_t size, void* data, uint32_t type);
229
230#ifndef NO_PYTHON
231
251 uint32_t reqTransactionPy(uint64_t address, boost::python::object p, uint32_t size, uint32_t offset, uint32_t type);
252
253#endif
254
276 static void copyBits(uint8_t* dstData, uint32_t dstLsb, uint8_t* srcData, uint32_t srcLsb, uint32_t size);
277
278#ifndef NO_PYTHON
279
296 static void copyBitsPy(boost::python::object dst,
297 uint32_t dstLsb,
298 boost::python::object src,
299 uint32_t srcLsb,
300 uint32_t size);
301
302#endif
303
321 static void setBits(uint8_t* dstData, uint32_t lsb, uint32_t size);
322
323#ifndef NO_PYTHON
324
339 static void setBitsPy(boost::python::object dst, uint32_t lsb, uint32_t size);
340
341#endif
342
359 static bool anyBits(uint8_t* srcData, uint32_t lsb, uint32_t size);
360
361#ifndef NO_PYTHON
362
377 static bool anyBitsPy(boost::python::object src, uint32_t lsb, uint32_t size);
378
379#endif
380
381#ifndef NO_PYTHON
382
384 void rshiftPy(boost::python::object p);
385
386#endif
387
389 std::shared_ptr<rogue::interfaces::memory::Slave>& operator>>(
390 std::shared_ptr<rogue::interfaces::memory::Slave>& other);
391
392 protected:
394 uint32_t intTransaction(std::shared_ptr<rogue::interfaces::memory::Transaction> tran);
395
396 public:
406 void waitTransaction(uint32_t id);
407};
408
410typedef std::shared_ptr<rogue::interfaces::memory::Master> MasterPtr;
411} // namespace memory
412} // namespace interfaces
413} // namespace rogue
414
415#endif
Master endpoint for memory transactions.
Definition Master.h:50
uint32_t reqTransaction(uint64_t address, uint32_t size, void *data, uint32_t type)
Starts a new transaction.
Definition Master.cpp:153
static void setBitsPy(boost::python::object dst, uint32_t lsb, uint32_t size)
Python wrapper for setBits.
Definition Master.cpp:377
uint32_t intTransaction(std::shared_ptr< rogue::interfaces::memory::Transaction > tran)
Starts an internal transaction from an existing transaction object.
Definition Master.cpp:207
uint32_t reqSlaveId()
Queries the downstream slave ID.
Definition Master.cpp:104
virtual ~Master()
Destroys the memory master instance.
Definition Master.cpp:86
void rshiftPy(boost::python::object p)
Supports >> operator usage from Python.
Definition Master.cpp:460
std::string getError()
Returns the last transaction error string.
Definition Master.cpp:129
std::shared_ptr< rogue::interfaces::memory::Slave > & operator>>(std::shared_ptr< rogue::interfaces::memory::Slave > &other)
Connects this master to a slave via stream chaining operator.
Definition Master.cpp:490
std::string reqSlaveName()
Queries the downstream slave name.
Definition Master.cpp:109
void setSlave(std::shared_ptr< rogue::interfaces::memory::Slave > slave)
Sets the downstream slave or hub.
Definition Master.cpp:92
uint32_t reqMinAccess()
Queries minimum access size in bytes for this interface path.
Definition Master.cpp:114
uint64_t reqAddress()
Queries the address offset of the next downstream layer.
Definition Master.cpp:124
virtual void stop()
Stops the interface and releases runtime resources.
Definition Master.cpp:89
static std::shared_ptr< rogue::interfaces::memory::Master > create()
Creates a memory master instance.
Definition Master.cpp:44
std::shared_ptr< rogue::interfaces::memory::Slave > getSlave()
Returns the configured downstream slave or hub.
Definition Master.cpp:99
Master()
Constructs a memory master instance.
Definition Master.cpp:76
static void copyBits(uint8_t *dstData, uint32_t dstLsb, uint8_t *srcData, uint32_t srcLsb, uint32_t size)
Copies bits between two byte arrays.
Definition Master.cpp:259
static void copyBitsPy(boost::python::object dst, uint32_t dstLsb, boost::python::object src, uint32_t srcLsb, uint32_t size)
Python wrapper for copyBits.
Definition Master.cpp:299
void setTimeout(uint64_t timeout)
Sets the timeout value for future transactions.
Definition Master.cpp:141
void waitTransaction(uint32_t id)
Waits for transaction completion or timeout.
Definition Master.cpp:231
void clearError()
Clears the stored transaction error string.
Definition Master.cpp:134
static bool anyBitsPy(boost::python::object src, uint32_t lsb, uint32_t size)
Python wrapper for anyBits.
Definition Master.cpp:437
static void setBits(uint8_t *dstData, uint32_t lsb, uint32_t size)
Sets a contiguous bit range in a byte array.
Definition Master.cpp:345
uint32_t reqMaxAccess()
Queries maximum access size in bytes for this interface path.
Definition Master.cpp:119
static bool anyBits(uint8_t *srcData, uint32_t lsb, uint32_t size)
Tests whether any bit in a range is set.
Definition Master.cpp:401
uint32_t reqTransactionPy(uint64_t address, boost::python::object p, uint32_t size, uint32_t offset, uint32_t type)
Python variant of reqTransaction.
Definition Master.cpp:167
static void setup_python()
Registers this type with Python bindings.
Definition Master.cpp:49
Memory transaction container passed between master and slave.
Definition Transaction.h:78
std::shared_ptr< rogue::interfaces::memory::Master > MasterPtr
Shared pointer alias for Master.
Definition Master.h:410