10. MMU Package¶
-
typedef
MMU::
32 MaxNumSGLists
¶
-
typedef
MMU::
Bit#(TLog#(MaxNumSGLists)) SGListId
¶
-
typedef
MMU::
12 SGListPageShift0
¶
-
typedef
MMU::
16 SGListPageShift4
¶
-
typedef
MMU::
20 SGListPageShift8
¶
-
typedef
MMU::
24 SGListPageShift12
¶
-
typedef
MMU::
Bit#(TLog#(MaxNumSGLists)) RegionsIdx
¶
-
typedef
MMU::
8 IndexWidth
¶
10.1. Address Translation¶
-
struct
MMU::
AddrTransRequest
¶ Address translation request type
-
id
→ SGListId ¶ Which object identifier to use.
-
off
→ Bit#(MemOffsetSize)¶ The address to translate.
-
-
interface
MMU::
MMU
(numeric type addrWidth)¶ An address translator
-
request
→ MMURequest¶ The interface of the MMU that is exposed to software as a portal.
-
addr
→ Vector#(2,Server#(AddrTransRequest,Bit#(addrWidth)))¶ The address translation servers
-
-
interface
MMU::
MMURequest;
¶ The Connectal MMU maps linear offsets on objects identified by sglId to dmaAddress. It is constructed from a list of segments, where the segments are sorted by size in descending order. Each segment must be one of the supported sizes.
-
sglist
(Bit#(32) sglId, Bit#(32) segmentIndex, Bit#(64) addr, Bit#(32) len)) → Action¶ Updates the address of the segment number segmentIndex for object identified by sglId. The address has been preshifted so that the final address may be constructed by concatenating addr and offset within the segment.
-
region
(Bit#(32) sglId, Bit#(64) barr12, Bit#(32) idxOffset12, Bit#(64) barr8, Bit#(32) idxOffset8, Bit#(64) barr4, Bit#(32) idxOffset4, Bit#(64) barr0, Bit#(32) idxOffset0)) → Action¶ Updates the boundaries between the segments of different sizes for the object identified by sglId.
For example, if an offset to be translated is less than barr12, then the target segment is of size SGListPageShift12 (2^24 bytes). If the offset is less than barr12, then idxOffset12 points to the first translation table entry for segments of that size
pbase = offset >> segAddrSize + idxOffset segNumber = pbase + idxOffset dmaBase = translationTable[sglId,segNumber] dmaAddress = {dmaBase[physAddrSize-segAddrSize-1:0],offset[segAddrSize-1:0]}
-
idRequest
(SpecialTypeForSendingFd fd)) → Action¶ Requests a new object identifier.
-
idReturn
(Bit#(32) sglId)) → Action¶ Indicates that the designated object is no longer in use. The MMU clears the translation entries for this object.
-
setInterface
(Bit#(32) interfaceId, Bit#(32) sglId)) → Action¶ This method is only implemented in software responders.
-
-
interface
MMU::
MMUIndication;
¶ -
interface
MMU::
.. bsv:method:: Action idResponse(Bit
((32) sglId);)¶ Response from idRequest indicating the new object identifier sglId.
-
configResp
(Bit#(32) sglId)) → Action¶
-
error
(Bit#(32) code, Bit#(32) sglId, Bit#(64) offset, Bit#(64) extra)) → Action¶ Sent from the MMU when there is a translation error.
-
-
struct
MMU::
DmaErrorType
¶ -
DmaErrorNone
¶ Code 0 indicates no error.
-
DmaErrorSGLIdOutOfRange_r
¶ Code 1 indicates object identifier was out of range during a read request.
-
DmaErrorSGLIdOutOfRange_w
¶ Code 2 indicates object identifier was out of range during a read request.
-
DmaErrorMMUOutOfRange_r
¶ Code 3 indicates MMU identifier was out of range during a read request.
-
DmaErrorMMUOutOfRange_w
¶ Code 4 indicates MMU identifier was out of range during a read request.
-
DmaErrorOffsetOutOfRange
¶ Code 5 indicates offset was out of range for the designated object.
-
DmaErrorSGLIdInvalid
¶ Code 6 indicates the object identifier was out of range.
-
DmaErrorTileTagOutOfRange
¶ Code 7 indicates the tag was out of range for the requesting platform application tile.
-
-
module
MMU::
mkMMU
(Integer iid, Bool hostMapped, MMUIndication mmuIndication) → (MMU#(addrWidth)¶ Instantiates an address translator that stores a scatter-gather list to define the logical to physical address mapping.
Parameter iid is the portal identifier of the MMURequest interface.
Parameter hostMapped is true for simulation.
-
interface
MMU::
MemServerRequest;
¶ -
addrTrans
(Bit#(32) sglId, Bit#(32) offset)) → Action¶ Requests an address translation
-
setTileState
(TileControl tc)) → Action¶ Changes tile status
-
stateDbg
(ChannelType rc) → Action¶ Requests debug info for the specified channel type
-
memoryTraffic
(ChannelType rc)) → Action¶
-
-
interface
MMU::
MemServerIndication;
¶ -
interface
MMU::
.. bsv:method:: Action addrResponse(Bit
((64) physAddr);)¶ -
interface
MMU::
.. bsv:method:: Action reportStateDbg(DmaDbgRec rec);
¶ -
interface
MMU::
.. bsv:method:: Action reportMemoryTraffic(Bit
((64) words);)¶ -
interface
MMU::
.. bsv:method:: Action error(Bit
((32) code, Bit#(32) sglId, Bit#(64) offset, Bit#(64) extra);)¶