Source code for hwtLib.amba.axi_comp.buff
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Optional
from hwt.interfaces.utils import addClkRstn
from hwt.serializer.mode import serializeParamsUniq
from hwt.synthesizer.param import Param
from hwtLib.abstract.busBridge import BusBridge
from hwtLib.amba.axis_comp.builder import AxiSBuilder
[docs]@serializeParamsUniq
class AxiBuff(BusBridge):
"""
Transaction buffer for AXI3/4/Lite and others
.. hwt-autodoc:: _example_AxiBuff
"""
[docs] def __init__(self, intfCls, hdl_name_override:Optional[str]=None):
self.intfCls = intfCls
super(AxiBuff, self).__init__(hdl_name_override=hdl_name_override)
def _config(self):
self.INTF_CLS = Param(self.intfCls)
self.intfCls._config(self)
self.ADDR_BUFF_DEPTH = Param(4)
self.DATA_BUFF_DEPTH = Param(4)
def _declr(self):
addClkRstn(self)
with self._paramsShared():
self.s = self.intfCls()
with self._paramsShared():
self.m = self.intfCls()._m()
assert self.ADDR_BUFF_DEPTH > 0 or self.DATA_BUFF_DEPTH > 0, (
"This buffer is completely disabled,"
" it should not be instantiated at all",
self.ADDR_BUFF_DEPTH, self.DATA_BUFF_DEPTH)
def _impl(self):
ADDR_DEPTH = self.ADDR_BUFF_DEPTH
DATA_DEPTH = self.DATA_BUFF_DEPTH
for name, m, s, depth in [("ar", self.s.ar, self.m.ar, ADDR_DEPTH),
("aw", self.s.aw, self.m.aw, ADDR_DEPTH),
("w", self.s.w, self.m.w, DATA_DEPTH)]:
i = AxiSBuilder(self, m, name).buff(
items=depth
).end
s(i)
for name, m, s, depth in [("r", self.m.r, self.s.r, DATA_DEPTH),
("b", self.m.b, self.s.b, ADDR_DEPTH)]:
i = AxiSBuilder(self, m, name).buff(
items=depth,
).end
s(i)
[docs]def _example_AxiBuff():
from hwtLib.amba.axi4 import Axi4
u = AxiBuff(Axi4)
return u
if __name__ == "__main__":
from hwt.synthesizer.utils import to_rtl_str
u = _example_AxiBuff()
print(to_rtl_str(u))