Source code for hwtLib.amba.axi_comp.interconnect.common
from itertools import chain
from typing import Optional
from hwt.hwIOs.hwIOArray import HwIOArray
from hwt.hwIOs.utils import addClkRstn
from hwt.hwParam import HwParam
from hwt.math import log2ceil
from hwtLib.abstract.busInterconnect import BusInterconnect
[docs]
class AxiInterconnectCommon(BusInterconnect):
[docs]
def __init__(self, hwIOCls, hdlName:Optional[str]=None):
self.hwIOCls = hwIOCls
super(AxiInterconnectCommon, self).__init__(hdlName=hdlName)
def hwConfig(self):
super(AxiInterconnectCommon, self).hwConfig()
self.HWIO_CLS = HwParam(self.hwIOCls)
self.MAX_TRANS_OVERLAP = HwParam(16)
self.hwIOCls.hwConfig(self)
def hwDeclr(self, has_r=True, has_w=True):
addClkRstn(self)
AXI = self.hwIOCls
with self._hwParamsShared():
self.s = HwIOArray(AXI() for _ in self.MASTERS)
with self._hwParamsShared(exclude=({}, {"ADDR_WIDTH"})):
self.m = HwIOArray(AXI() for _ in self.SLAVES)._m()
for i in chain(self.m, self.s):
i.HAS_W = has_w
i.HAS_R = has_r
for s, (_, size) in zip(self.m, self.SLAVES):
s.ADDR_WIDTH = log2ceil(size - 1)