Source code for hwtLib.amba.axiLite_comp.sim.memSpaceMaster
from hwt.interfaces.agents.handshaked import HandshakedReadListener
from hwt.interfaces.agents.tuleWithCallback import TupleWithCallback
from hwtLib.amba.axi3Lite import Axi3Lite
from hwtLib.amba.axi4Lite import Axi4Lite
from hwtLib.sim.abstractMemSpaceMaster import AbstractMemSpaceMaster
[docs]class AxiLiteMemSpaceMaster(AbstractMemSpaceMaster):
"""
Controller of AxiLite simulation agent which keeps track of transactions
and allows struct like data access
"""
[docs] def __init__(self, bus, registerMap):
super(AxiLiteMemSpaceMaster, self).__init__(bus, registerMap)
self._r_planed_words_cnt = 0
self._w_planed_words_cnt = 0
self._read_listener = None
if isinstance(bus, Axi4Lite):
self._writeAddr = self._axi4lite_writeAddr
elif isinstance(bus, Axi3Lite):
self._writeAddr = self._axi3lite_writeAddr
else:
raise TypeError(bus)
[docs] def _axi4lite_writeAddr(self, addrChannel, addr, size):
"""
add address transaction to address channel of agent
"""
prot = 0
addrChannel.data.append((addr, prot))
[docs] def _axi3lite_writeAddr(self, addrChannel, addr, size):
"""
add address transaction to address channel of agent
"""
addrChannel.data.append(addr)
[docs] def _writeData(self, data, mask, onDone=None):
"""
add data write transaction to agent
:param onDone: callback function(sim) -> None
"""
d = TupleWithCallback(data, mask, onDone=onDone)
self._bus._ag.w.data.append(d)
[docs] def _write(self, addr, size, data, mask, onDone=None):
"""
add write address and write data to agent
:param onDone: callback function(sim) -> None
"""
self._writeAddr(self._bus._ag.aw, addr, size)
self._w_planed_words_cnt += 1
self._writeData(data, mask, onDone=onDone)
[docs] def _read(self, addr, size, onDone=None):
"""
add read address transaction to agent
"""
self._writeAddr(self._bus._ag.ar, addr, size)
self._r_planed_words_cnt += 1
if onDone:
if self._read_listener is None:
self._read_listener = HandshakedReadListener(self._bus.r._ag)
self._read_listener.register(self._r_planed_words_cnt, onDone)