Source code for hwtLib.peripheral.ethernet.rmii

from hwt.hwIO import HwIO
from hwt.hwIOs.std import HwIOVectSignal, HwIOSignal, HwIOClk
from hwt.hwParam import HwParam
from hwt.pyUtils.typingFuture import override
from hwtLib.peripheral.ethernet.rmii_agent import RmiiAgent, RmiiTxChannelAgent, \
    RmiiRxChannelAgent
from hwtSimApi.hdlSimulator import HdlSimulator
from ipCorePackager.constants import DIRECTION
from ipCorePackager.intfIpMeta import IntfIpMeta


[docs] class RmiiTxChannel(HwIO): """ .. hwt-autodoc:: """ @override def hwConfig(self): self.DATA_WIDTH = HwParam(2) @override def hwDeclr(self): self.d = HwIOVectSignal(self.DATA_WIDTH) self.en = HwIOSignal()
[docs] @override def _initSimAgent(self, sim: HdlSimulator): self._ag = RmiiTxChannelAgent(sim, self)
[docs] class RmiiRxChannel(HwIO): """ .. hwt-autodoc:: """ @override def hwConfig(self): self.DATA_WIDTH = HwParam(2) @override def hwDeclr(self): self.d = HwIOVectSignal(self.DATA_WIDTH) self.crs_dv = HwIOSignal()
[docs] @override def _initSimAgent(self, sim: HdlSimulator): self._ag = RmiiRxChannelAgent(sim, self)
[docs] class Rmii(HwIO): """ Reduced Media Independent HwIO off-chip PHY-MAC interface for <=100BASE Ethernet :ivar ~.crs_dc: carrier sense/ rx data valid :ivar ~.md: interface for configuration and identification of PHY :note: 50Mhz reference clock may be an input on both devices from an external clock source, or may be driven from the MAC to the PHY :note: ref_clk operates on 50MHZ in both 100M/10M mode however in 10M mode data have to stay valid for 10 clk cycles .. hwt-autodoc:: """ @override def hwConfig(self): self.CLK_MASTER_DIR = HwParam(DIRECTION.IN) self.CLK_FREQ = HwParam(int(50e6)) self.DATA_WIDTH = HwParam(2) @override def hwDeclr(self): self.ref_clk = HwIOClk(masterDir=self.CLK_MASTER_DIR) self.ref_clk.FREQ = self.CLK_FREQ with self._hwParamsShared(): with self._associated(clk=self.ref_clk): self.tx = RmiiTxChannel() self.rx = RmiiRxChannel(masterDir=DIRECTION.IN)
[docs] @override def _initSimAgent(self, sim: HdlSimulator): self._ag = RmiiAgent(sim, self)
[docs] class IP_Rmii(IntfIpMeta):
[docs] def __init__(self): super().__init__() self.name = "rmii" self.version = "1.0" self.vendor = "xilinx.com" self.library = "interface" self.map = { "tx": { "d": "TXD", "en": "TX_EN", }, "rx": { "d": "RXD", "crs_dv": "CRS_DV", }, }