Source code for hwtLib.amba.axi4Lite
from hwt.hwIOs.std import HwIOVectSignal
from hwt.pyUtils.typingFuture import override
from hwtLib.amba.axi3Lite import IP_Axi3Lite, Axi3Lite, Axi3Lite_r, \
Axi3Lite_b, Axi3Lite_w, Axi3Lite_addr, Axi3Lite_addrAgent
from hwtLib.amba.axi_common import AxiMap, Axi_hs
from hwtLib.amba.constants import PROT_DEFAULT
from hwtSimApi.hdlSimulator import HdlSimulator
[docs]
class Axi4Lite_addr(Axi3Lite_addr):
"""
:class:`~.Axi3Lite_addr` with "prot" signal added.
.. hwt-autodoc::
"""
@override
def hwDeclr(self):
self.addr = HwIOVectSignal(self.ADDR_WIDTH)
self.prot = HwIOVectSignal(3)
Axi_hs.hwDeclr(self)
[docs]
@override
def _initSimAgent(self, sim: HdlSimulator):
self._ag = Axi4Lite_addrAgent(sim, self)
[docs]
class Axi4Lite_addrAgent(Axi3Lite_addrAgent):
"""
:ivar ~.data: iterable of addr
"""
[docs]
@override
def get_data(self):
return self.hwIO.addr.read(), self.hwIO.prot.read()
[docs]
@override
def set_data(self, data):
if data is None:
addr, prot = None, None
else:
addr, prot = data
self.hwIO.addr.write(addr)
self.hwIO.prot.write(prot)
[docs]
@override
def create_addr_req(self, addr, prot=PROT_DEFAULT):
return (addr, prot)
[docs]
class Axi4Lite_w(Axi3Lite_w):
"""
(Same as :class:`~.Axi3Lite_w`)
.. hwt-autodoc::
"""
[docs]
class Axi4Lite_b(Axi3Lite_b):
"""
(Same as :class:`~.Axi3Lite_b`)
.. hwt-autodoc::
"""
[docs]
class Axi4Lite_r(Axi3Lite_r):
"""
(Same as :class:`~.Axi3Lite_r`)
.. hwt-autodoc::
"""
[docs]
class Axi4Lite(Axi3Lite):
"""
Axi4-lite bus interface
(Same as :class:`~.Axi3Lite` just address channels do have "prot" signal)
.. hwt-autodoc::
"""
AW_CLS = Axi4Lite_addr
AR_CLS = Axi4Lite_addr
W_CLS = Axi4Lite_w
R_CLS = Axi4Lite_r
B_CLS = Axi4Lite_b
[docs]
@override
def _getIpCoreIntfClass(self):
return IP_Axi4Lite
[docs]
class IP_Axi4Lite(IP_Axi3Lite):
"""
IP core meta description for Axi4-lite interface
"""
[docs]
def __init__(self):
super().__init__()
self.quartus_name = "axi4lite"
a_sigs = ['addr', 'prot', 'valid', 'ready']
self.map = {'aw': AxiMap('aw', a_sigs),
'w': AxiMap('w', ['data', 'strb', 'valid', 'ready']),
'ar': AxiMap('ar', a_sigs),
'r': AxiMap('r', ['data', 'resp', 'valid', 'ready']),
'b': AxiMap('b', ['valid', 'ready', 'resp'])
}