17#ifndef __ROGUE_INTERFACES_MEMORY_MASTER_H__
18#define __ROGUE_INTERFACES_MEMORY_MASTER_H__
32 #include <boost/python.hpp>
55 typedef std::map<uint32_t, std::shared_ptr<rogue::interfaces::memory::Transaction> > TransactionMap;
58 TransactionMap tranMap_;
61 std::shared_ptr<rogue::interfaces::memory::Slave> slave_;
64 struct timeval sumTime_;
73 std::shared_ptr<rogue::Logging> log_;
87 static std::shared_ptr<rogue::interfaces::memory::Master>
create();
117 void setSlave(std::shared_ptr<rogue::interfaces::memory::Slave> slave);
126 std::shared_ptr<rogue::interfaces::memory::Slave>
getSlave();
228 uint32_t
reqTransaction(uint64_t address, uint32_t size,
void* data, uint32_t type);
251 uint32_t
reqTransactionPy(uint64_t address, boost::python::object p, uint32_t size, uint32_t offset, uint32_t type);
276 static void copyBits(uint8_t* dstData, uint32_t dstLsb, uint8_t* srcData, uint32_t srcLsb, uint32_t size);
296 static void copyBitsPy(boost::python::object dst,
298 boost::python::object src,
321 static void setBits(uint8_t* dstData, uint32_t lsb, uint32_t size);
339 static void setBitsPy(boost::python::object dst, uint32_t lsb, uint32_t size);
359 static bool anyBits(uint8_t* srcData, uint32_t lsb, uint32_t size);
377 static bool anyBitsPy(boost::python::object src, uint32_t lsb, uint32_t size);
384 void rshiftPy(boost::python::object p);
389 std::shared_ptr<rogue::interfaces::memory::Slave>&
operator>>(
390 std::shared_ptr<rogue::interfaces::memory::Slave>& other);
394 uint32_t
intTransaction(std::shared_ptr<rogue::interfaces::memory::Transaction> tran);
410typedef std::shared_ptr<rogue::interfaces::memory::Master>
MasterPtr;
Master endpoint for memory transactions.
uint32_t reqTransaction(uint64_t address, uint32_t size, void *data, uint32_t type)
Starts a new transaction.
static void setBitsPy(boost::python::object dst, uint32_t lsb, uint32_t size)
Python wrapper for setBits.
uint32_t intTransaction(std::shared_ptr< rogue::interfaces::memory::Transaction > tran)
Starts an internal transaction from an existing transaction object.
uint32_t reqSlaveId()
Queries the downstream slave ID.
virtual ~Master()
Destroys the memory master instance.
void rshiftPy(boost::python::object p)
Supports >> operator usage from Python.
std::string getError()
Returns the last transaction error string.
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.
std::string reqSlaveName()
Queries the downstream slave name.
void setSlave(std::shared_ptr< rogue::interfaces::memory::Slave > slave)
Sets the downstream slave or hub.
uint32_t reqMinAccess()
Queries minimum access size in bytes for this interface path.
uint64_t reqAddress()
Queries the address offset of the next downstream layer.
virtual void stop()
Stops the interface and releases runtime resources.
static std::shared_ptr< rogue::interfaces::memory::Master > create()
Creates a memory master instance.
std::shared_ptr< rogue::interfaces::memory::Slave > getSlave()
Returns the configured downstream slave or hub.
Master()
Constructs a memory master instance.
static void copyBits(uint8_t *dstData, uint32_t dstLsb, uint8_t *srcData, uint32_t srcLsb, uint32_t size)
Copies bits between two byte arrays.
static void copyBitsPy(boost::python::object dst, uint32_t dstLsb, boost::python::object src, uint32_t srcLsb, uint32_t size)
Python wrapper for copyBits.
void setTimeout(uint64_t timeout)
Sets the timeout value for future transactions.
void waitTransaction(uint32_t id)
Waits for transaction completion or timeout.
void clearError()
Clears the stored transaction error string.
static bool anyBitsPy(boost::python::object src, uint32_t lsb, uint32_t size)
Python wrapper for anyBits.
static void setBits(uint8_t *dstData, uint32_t lsb, uint32_t size)
Sets a contiguous bit range in a byte array.
uint32_t reqMaxAccess()
Queries maximum access size in bytes for this interface path.
static bool anyBits(uint8_t *srcData, uint32_t lsb, uint32_t size)
Tests whether any bit in a range is set.
uint32_t reqTransactionPy(uint64_t address, boost::python::object p, uint32_t size, uint32_t offset, uint32_t type)
Python variant of reqTransaction.
static void setup_python()
Registers this type with Python bindings.
Memory transaction container passed between master and slave.
std::shared_ptr< rogue::interfaces::memory::Master > MasterPtr
Shared pointer alias for Master.