Source code for hwtLib.amba.axiLite_comp.to_axi

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from typing import Optional

from hwt.hwIO import HwIO
from hwt.hwParam import HwParam
from hwt.pyUtils.typingFuture import override
from hwt.serializer.mode import serializeParamsUniq
from hwtLib.abstract.busBridge import BusBridge
from hwtLib.amba.axi4 import Axi4, Axi4_addr
from hwtLib.amba.axi4Lite import Axi4Lite
from hwtLib.amba.constants import BURST_INCR, CACHE_DEFAULT, LOCK_DEFAULT, \
    BYTES_IN_TRANS, QOS_DEFAULT


[docs] def HwIO_notPresentOnOther(a: HwIO, b: HwIO): """ :return: set of interfaces which does not have an equivalent on "b" """ missing_on_b = [] for on_a in a._hwIOs: on_b = getattr(b, on_a._name, None) if on_b is None: missing_on_b.append(on_a) return set(missing_on_b)
[docs] @serializeParamsUniq class AxiLite_to_Axi(BusBridge): """ Bridge from AxiLite interface to Axi3/4 interface .. hwt-autodoc:: """
[docs] def __init__(self, hwIOCls=Axi4, hdlName:Optional[str]=None): self.hwIOCls = hwIOCls super(AxiLite_to_Axi, self).__init__(hdlName=hdlName)
@override def hwConfig(self): self.HWIO_CLS = HwParam(self.hwIOCls) self.hwIOCls.hwConfig(self) self.DEFAULT_ID = HwParam(0) @override def hwDeclr(self): with self._hwParamsShared(): self.s = Axi4Lite() self.m = self.hwIOCls()._m() @override def hwImpl(self) -> None: axiFull = self.m axiLite = self.s def connect_what_is_same_lite_to_full(src, dst): dst(src, exclude=HwIO_notPresentOnOther(dst, src)) def connect_what_is_same_full_to_lite(src, dst): dst(src, exclude=HwIO_notPresentOnOther(src, dst)) def a_defaults(a: Axi4_addr): a.id(self.DEFAULT_ID) a.burst(BURST_INCR) a.cache(CACHE_DEFAULT) a.len(0) a.lock(LOCK_DEFAULT) a.size(BYTES_IN_TRANS(self.DATA_WIDTH // 8)) if hasattr(a, "qos"): # axi3/4 difference a.qos(QOS_DEFAULT) connect_what_is_same_lite_to_full(axiLite.ar, axiFull.ar) a_defaults(axiFull.ar) connect_what_is_same_lite_to_full(axiLite.aw, axiFull.aw) a_defaults(axiFull.aw) connect_what_is_same_lite_to_full(axiLite.w, axiFull.w) if hasattr(axiFull.w, "id"): # axi3/4 difference axiFull.w.id(self.DEFAULT_ID) axiFull.w.last(1) connect_what_is_same_full_to_lite(axiFull.r, axiLite.r) connect_what_is_same_full_to_lite(axiFull.b, axiLite.b)
if __name__ == "__main__": from hwt.synth import to_rtl_str m = AxiLite_to_Axi() print(to_rtl_str(m))