Source code for hwtLib.xilinx.locallink.axis_conv

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

from hwt.code import Concat, Switch, If
from hwt.hdl.types.bits import HBits
from hwt.hwIOs.utils import addClkRstn, propagateClkRstn
from hwt.hwModule import HwModule
from hwt.hwParam import HwParam
from hwt.pyUtils.typingFuture import override
from hwtLib.amba.axi4s import Axi4Stream
from hwtLib.xilinx.locallink.hIOLocallink import LocalLink
from pyMathBitPrecise.bit_utils import mask


[docs] def strbToRem(strbBits, remBits): for i in range(strbBits): strb = HBits(strbBits).from_py(mask(i + 1)) rem = HBits(remBits).from_py(i) yield strb, rem
[docs] class LocalLinkToAxi4S(HwModule): """ Framelink to axi-stream format of user signal: user[0]: start of packet user[1]: end of packet .. hwt-autodoc:: """ @override def hwConfig(self): Axi4SToLocalLink.hwConfig(self) @override def hwDeclr(self): with self._hwParamsShared(): addClkRstn(self) self.dataIn = LocalLink() self.dataOut = Axi4Stream()._m() @override def hwImpl(self): In = self.dataIn Out = self.dataOut sop = self._sig("sop") eop = self._sig("eop") Out.data(In.data) Out.valid(~In.src_rdy_n) In.dst_rdy_n(~Out.ready) Out.last(~In.eof_n) eop(~In.eop_n) sop(~In.sop_n) Out.user(Concat(eop, sop)) strbMap = [] remBits = In.rem._dtype.bit_length() strbBits = Out.strb._dtype.bit_length() for strb, rem in strbToRem(strbBits, remBits): strbMap.append((rem, Out.strb(strb))) Switch(In.rem)\ .add_cases(strbMap)\ .Default(Out.strb(None))
if __name__ == "__main__": from hwt.synth import to_rtl_str m = Axi4SToLocalLink() print(to_rtl_str(m))