rogue
Loading...
Searching...
No Matches
Hub.h
Go to the documentation of this file.
1
19#ifndef __ROGUE_INTERFACES_MEMORY_HUB_H__
20#define __ROGUE_INTERFACES_MEMORY_HUB_H__
21#include "rogue/Directives.h"
22
23#include <stdint.h>
24
25#include <memory>
26#include <string>
27#include <thread>
28
29#include "rogue/Logging.h"
32
33#ifndef NO_PYTHON
34 #include <boost/python.hpp>
35#endif
36
37namespace rogue {
38namespace interfaces {
39namespace memory {
40
72class Hub : public Master, public Slave {
73 // Offset address of hub
74 uint64_t offset_;
75
76 // Flag if this is a base slave
77 bool root_;
78
82 std::shared_ptr<rogue::Logging> log_;
83
84 public:
103 static std::shared_ptr<rogue::interfaces::memory::Hub> create(uint64_t offset, uint32_t min, uint32_t max);
104
105 // Setup class for use in python
106 static void setup_python();
107
125 Hub(uint64_t offset, uint32_t min, uint32_t max);
126
127 // Destroy the Hub
128 ~Hub();
129
138 uint64_t getOffset();
139
148 uint64_t getAddress();
149
162 uint32_t doSlaveId();
163
176 std::string doSlaveName();
177
187 uint32_t doMinAccess();
188
199 uint32_t doMaxAccess();
200
211 uint64_t doAddress();
212
227 virtual void doTransaction(std::shared_ptr<rogue::interfaces::memory::Transaction> transaction);
228};
229
231typedef std::shared_ptr<rogue::interfaces::memory::Hub> HubPtr;
232
233#ifndef NO_PYTHON
234
242class HubWrap : public rogue::interfaces::memory::Hub, public boost::python::wrapper<rogue::interfaces::memory::Hub> {
243 public:
250 HubWrap(uint64_t offset, uint32_t min, uint32_t max);
251
260 void doTransaction(std::shared_ptr<rogue::interfaces::memory::Transaction> transaction);
261
270 void defDoTransaction(std::shared_ptr<rogue::interfaces::memory::Transaction> transaction);
271};
272
273// Convienence
274typedef std::shared_ptr<rogue::interfaces::memory::HubWrap> HubWrapPtr;
275#endif
276
277} // namespace memory
278} // namespace interfaces
279} // namespace rogue
280
281#endif
Internal Boost.Python wrapper for rogue::interfaces::memory::Hub. Enables Python subclasses to overri...
Definition Hub.h:242
void defDoTransaction(std::shared_ptr< rogue::interfaces::memory::Transaction > transaction)
Calls the base-class doTransaction() implementation.
Definition Hub.cpp:193
void doTransaction(std::shared_ptr< rogue::interfaces::memory::Transaction > transaction)
Services a transaction request from an attached master.
Definition Hub.cpp:176
Memory interface Hub device.
Definition Hub.h:72
~Hub()
Destroy a block.
Definition Hub.cpp:54
uint32_t doSlaveId()
Services getSlaveId request from an attached master.
Definition Hub.cpp:67
uint64_t getOffset()
Returns the local offset of this hub.
Definition Hub.cpp:57
uint64_t getAddress()
Returns the full address of this hub, including local offset.
Definition Hub.cpp:62
virtual void doTransaction(std::shared_ptr< rogue::interfaces::memory::Transaction > transaction)
Services a transaction request from an attached master.
Definition Hub.cpp:108
static void setup_python()
Definition Hub.cpp:155
std::string doSlaveName()
Services getSlaveName request from an attached master.
Definition Hub.cpp:75
uint64_t doAddress()
Services getAddress request from an attached master.
Definition Hub.cpp:100
uint32_t doMinAccess()
Services getMinAccess request from an attached master.
Definition Hub.cpp:83
uint32_t doMaxAccess()
Services getMaxAccess request from an attached master.
Definition Hub.cpp:91
Master endpoint for memory transactions.
Definition Master.h:50
static std::shared_ptr< rogue::interfaces::memory::Master > create()
Creates a memory master instance.
Definition Master.cpp:44
Memory slave device.
Definition Slave.h:54
uint32_t max()
Returns configured maximum transaction size.
Definition Slave.cpp:116
uint32_t min()
Returns configured minimum transaction size.
Definition Slave.cpp:111
std::shared_ptr< rogue::interfaces::memory::Hub > HubPtr
Definition Hub.h:231
std::shared_ptr< rogue::interfaces::memory::HubWrap > HubWrapPtr
Definition Hub.h:274