38 lines
916 B
Python
38 lines
916 B
Python
from liteeth.common import *
|
|
|
|
class LiteEthMACTXLastBE(Module):
|
|
def __init__(self, dw):
|
|
self.sink = sink = Sink(eth_phy_description(dw))
|
|
self.source = source = Source(eth_phy_description(dw))
|
|
###
|
|
ongoing = Signal()
|
|
self.sync += \
|
|
If(sink.stb & sink.ack,
|
|
If(sink.sop,
|
|
ongoing.eq(1)
|
|
).Elif(sink.last_be,
|
|
ongoing.eq(0)
|
|
)
|
|
)
|
|
self.comb += [
|
|
source.stb.eq(sink.stb & (sink.sop | ongoing)),
|
|
source.sop.eq(sink.sop),
|
|
source.eop.eq(sink.last_be),
|
|
source.data.eq(sink.data),
|
|
sink.ack.eq(source.ack)
|
|
]
|
|
|
|
class LiteEthMACRXLastBE(Module):
|
|
def __init__(self, dw):
|
|
self.sink = sink = Sink(eth_phy_description(dw))
|
|
self.source = source = Source(eth_phy_description(dw))
|
|
###
|
|
self.comb += [
|
|
source.stb.eq(sink.stb),
|
|
source.sop.eq(sink.sop),
|
|
source.eop.eq(sink.eop),
|
|
source.data.eq(sink.data),
|
|
source.last_be.eq(sink.eop),
|
|
sink.ack.eq(source.ack)
|
|
]
|