litex/misoclib/liteeth/example_designs/targets/udp.py

70 lines
1.8 KiB
Python

from litescope.common import *
from litescope.frontend.la import LiteScopeLA
from litescope.core.port import LiteScopeTerm
from liteeth.common import *
from liteeth.generic import *
from targets.base import BaseSoC
class UDPSoC(BaseSoC):
default_platform = "kc705"
def __init__(self, platform):
BaseSoC.__init__(self, platform,
mac_address=0x10e2d5000000,
ip_address="192.168.1.40")
# add udp loopback on port 6000 with dw=8
self.add_udp_loopback(6000, 8, 8192, "loopback_8")
# add udp loopback on port 8000 with dw=32
self.add_udp_loopback(8000, 32, 8192, "loopback_32")
def add_udp_loopback(self, port, dw, depth, name=None):
port = self.core.udp.crossbar.get_port(port, dw)
buf = PacketBuffer(eth_udp_user_description(dw), depth//(dw//8), 8)
if name is None:
self.submodules += buf
else:
setattr(self.submodules, name, buf)
self.comb += Port.connect(port, buf)
class UDPSoCDevel(UDPSoC):
csr_map = {
"la": 20
}
csr_map.update(UDPSoC.csr_map)
def __init__(self, platform):
UDPSoC.__init__(self, platform)
debug = (
self.loopback_8.sink.stb,
self.loopback_8.sink.sop,
self.loopback_8.sink.eop,
self.loopback_8.sink.ack,
self.loopback_8.sink.data,
self.loopback_8.source.stb,
self.loopback_8.source.sop,
self.loopback_8.source.eop,
self.loopback_8.source.ack,
self.loopback_8.source.data,
self.loopback_32.sink.stb,
self.loopback_32.sink.sop,
self.loopback_32.sink.eop,
self.loopback_32.sink.ack,
self.loopback_32.sink.data,
self.loopback_32.source.stb,
self.loopback_32.source.sop,
self.loopback_32.source.eop,
self.loopback_32.source.ack,
self.loopback_32.source.data
)
self.submodules.la = LiteScopeLA(debug, 4096)
self.la.trigger.add_port(LiteScopeTerm(self.la.dw))
def do_exit(self, vns):
self.la.export(vns, "test/la.csv")
default_subtarget = UDPSoC