Memory Interface
The Rogue memory interface moves register and memory transactions between
Master and Slave objects through a composable bus graph.
You usually encounter this layer when building or debugging custom register-bus
topologies, protocol gateways, or address translators. In many PyRogue
applications, the lower-level memory wiring is hidden beneath Device and
Root abstractions. When those abstractions are not enough, the memory
interface provides the primitives needed to build the bus directly.
At a high level, the memory interface is used to:
Initiate reads, writes, posted writes, and verify operations
Route transactions through address windows and translation layers
Split or transform transactions when a bus topology requires it
Bridge register access across protocol boundaries such as TCP
Core Types
Four types appear throughout the memory interface:
Masterinitiates transactionsSlaveservices incoming transactionsHubroutes, offsets, or splits transactions between bus segmentsTransactioncarries address, type, size, data access, timeout state, and completion or error information
Each memory access is represented by a Transaction object. That
Transaction moves through the bus graph, with Hub layers adjusting
addresses or generating downstream work as needed before a final Slave
services the request.
Implementation Model
The memory interface implementation lives in C++ for deterministic behavior and performance. Python bindings expose the same primitives so custom bus graphs can still be assembled and integrated in Python-based applications.
That split supports a practical workflow:
Build and connect the memory graph in Python when exploring a design.
Validate addressing, routing, and transaction behavior.
Move only the performance-critical or hardware-facing pieces into C++ when needed.
Connection Model
Memory links use the same operator style as other Rogue connection graphs:
master >> slavecreates a one-way memory pathslave << mastercreates the same path in reverse syntaxPython helper:
pyrogue.busConnect(source, dest)C++ helper:
rogueBusConnect(source, dest)
Bus topology is often rooted in one or more protocol or hardware-facing
Slave objects, with Hub layers and custom memory components organizing
address windows between them.
What To Explore Next
Bus wiring patterns: Connecting Memory Elements
Transaction lifecycle details: Memory Transactions and Lifecycle
Custom
Masterpatterns: Memory Master PatternsCustom
Slavepatterns: Memory Slave PatternsHubtranslation patterns: Memory Hub PatternsTCP bridge usage: Memory TCP Bridge
API Reference
Python:
C++: