Source code for hwtLib.amba.axi_common
from hwt.constants import DIRECTION
from hwt.hwIO import HwIO
from hwt.hwIOs.std import HwIOVectSignal, HwIOSignal, HwIORdVldSync
from hwt.hwParam import HwParam
from hwt.pyUtils.typingFuture import override
from hwtSimApi.hdlSimulator import HdlSimulator
[docs]
class Axi_id(HwIO):
"""
.. hwt-autodoc::
"""
@override
def hwConfig(self, default_id_width=0):
self.ID_WIDTH = HwParam(default_id_width)
@override
def hwDeclr(self):
if self.ID_WIDTH:
self.id = HwIOVectSignal(self.ID_WIDTH)
[docs]
class Axi_user(HwIO):
@override
def hwConfig(self):
self.USER_WIDTH:int = HwParam(0)
@override
def hwDeclr(self):
if self.USER_WIDTH:
self.user = HwIOVectSignal(self.USER_WIDTH)
[docs]
class Axi_strb(HwIO):
"""
.. hwt-autodoc::
"""
@override
def hwConfig(self):
self.DATA_WIDTH = HwParam(64)
@override
def hwDeclr(self):
self.strb = HwIOVectSignal(self.DATA_WIDTH // 8)
[docs]
class Axi_hs(HwIORdVldSync):
"""
AXI handshake interface with ready and valid signal
(same as HwIORdVldSync just vld is valid and rd is ready)
transaction happens when both ready and valid are high
:ivar ~.ready: when high slave is ready to receive data
:ivar ~.valid: when high master is sending data to slave
.. hwt-autodoc::
"""
@override
def hwDeclr(self):
self.ready = HwIOSignal(masterDir=DIRECTION.IN)
self.valid = HwIOSignal()
[docs]
@override
def _initSimAgent(self, sim: HdlSimulator):
raise NotImplementedError()
[docs]
def AxiMap(prefix, listOfNames, d=None):
if d is None:
d = {}
for n in listOfNames:
d[n] = (prefix + n).upper()
return d