Merge pull request #127 from rowanG077/master

Add core CDC depth and buffered parameters.
This commit is contained in:
enjoy-digital 2023-07-03 18:57:24 +02:00 committed by GitHub
commit 322d8625b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 85 additions and 21 deletions

View File

@ -2,6 +2,7 @@
# This file is part of LiteEth.
#
# Copyright (c) 2015-2020 Florent Kermarrec <florent@enjoy-digital.fr>
# Copyright (c) 2023 LumiGuide Fietsdetectie B.V. <goemansrowan@gmail.com>
# SPDX-License-Identifier: BSD-2-Clause
from liteeth.common import *
@ -17,7 +18,11 @@ class LiteEthIPCore(Module, AutoCSR):
def __init__(self, phy, mac_address, ip_address, clk_freq, dw=8,
with_icmp = True,
with_ip_broadcast = True,
with_sys_datapath = False):
with_sys_datapath = False,
tx_cdc_depth = 32,
tx_cdc_buffered = False,
rx_cdc_depth = 32,
rx_cdc_buffered = False):
# Parameters.
# -----------
ip_address = convert_ip(ip_address)
@ -30,6 +35,10 @@ class LiteEthIPCore(Module, AutoCSR):
interface = "crossbar",
with_preamble_crc = True,
with_sys_datapath = with_sys_datapath,
tx_cdc_depth = tx_cdc_depth,
tx_cdc_buffered = tx_cdc_buffered,
rx_cdc_depth = rx_cdc_depth,
rx_cdc_buffered = rx_cdc_buffered
)
# ARP.
@ -67,7 +76,11 @@ class LiteEthUDPIPCore(LiteEthIPCore):
def __init__(self, phy, mac_address, ip_address, clk_freq, dw=8,
with_icmp = True,
with_ip_broadcast = True,
with_sys_datapath = False):
with_sys_datapath = False,
tx_cdc_depth = 32,
tx_cdc_buffered = False,
rx_cdc_depth = 32,
rx_cdc_buffered = False):
# Parameters.
# -----------
ip_address = convert_ip(ip_address)
@ -83,6 +96,10 @@ class LiteEthUDPIPCore(LiteEthIPCore):
dw = dw,
with_ip_broadcast = with_ip_broadcast,
with_sys_datapath = with_sys_datapath,
tx_cdc_depth = tx_cdc_depth,
tx_cdc_buffered = tx_cdc_buffered,
rx_cdc_depth = rx_cdc_depth,
rx_cdc_buffered = rx_cdc_buffered
)
# UDP.
# ----

View File

@ -7,6 +7,7 @@
# Copyright (c) 2020 Xiretza <xiretza@xiretza.xyz>
# Copyright (c) 2020 Stefan Schrijvers <ximin@ximinity.net>
# Copyright (c) 2022 Victor Suarez Rovere <suarezvictor@gmail.com>
# Copyright (c) 2023 LumiGuide Fietsdetectie B.V. <goemansrowan@gmail.com>
# SPDX-License-Identifier: BSD-2-Clause
"""
@ -284,6 +285,10 @@ class MACCore(PHYCore):
nrxslots = core_config.get("nrxslots", 2)
ntxslots = core_config.get("ntxslots", 2)
bus_standard = core_config["core"]
tx_cdc_depth = core_config.get("tx_cdc_depth", 32)
tx_cdc_buffered = core_config.get("tx_cdc_buffered", False)
rx_cdc_depth = core_config.get("rx_cdc_depth", 32)
rx_cdc_buffered = core_config.get("rx_cdc_buffered", False)
assert bus_standard in ["wishbone", "axi-lite"]
# PHY --------------------------------------------------------------------------------------
@ -297,7 +302,12 @@ class MACCore(PHYCore):
endianness = core_config["endianness"],
nrxslots = nrxslots,
ntxslots = ntxslots,
full_memory_we = core_config.get("full_memory_we", False))
full_memory_we = core_config.get("full_memory_we", False),
tx_cdc_depth = tx_cdc_depth
tx_cdc_buffered = tx_cdc_buffered
rx_cdc_depth = rx_cdc_depth
rx_cdc_buffered = rx_cdc_buffered
)
if bus_standard == "wishbone":
# Wishbone Interface -----------------------------------------------------------------------
@ -328,6 +338,10 @@ class UDPCore(PHYCore):
from liteeth.frontend.stream import LiteEthUDPStreamer
# Config -----------------------------------------------------------------------------------
tx_cdc_depth = core_config.get("tx_cdc_depth", 32)
tx_cdc_buffered = core_config.get("tx_cdc_buffered", False)
rx_cdc_depth = core_config.get("rx_cdc_depth", 32)
rx_cdc_buffered = core_config.get("rx_cdc_buffered", False)
# MAC Address.
mac_address = core_config.get("mac_address", None)
@ -355,6 +369,11 @@ class UDPCore(PHYCore):
clk_freq = core_config["clk_freq"],
dw = data_width,
with_sys_datapath = (data_width == 32),
tx_cdc_depth = tx_cdc_depth
tx_cdc_buffered = tx_cdc_buffered
rx_cdc_depth = rx_cdc_depth
rx_cdc_buffered = rx_cdc_buffered
)
# DHCP -------------------------------------------------------------------------------------

View File

@ -2,6 +2,7 @@
# This file is part of LiteEth.
#
# Copyright (c) 2015-2020 Florent Kermarrec <florent@enjoy-digital.fr>
# Copyright (c) 2023 LumiGuide Fietsdetectie B.V. <goemansrowan@gmail.com>
# SPDX-License-Identifier: BSD-2-Clause
from liteeth.common import *
@ -21,7 +22,11 @@ class LiteEthMAC(Module, AutoCSR):
hw_mac = None,
timestamp = None,
full_memory_we = False,
with_sys_datapath = False):
with_sys_datapath = False,
tx_cdc_depth = 32,
tx_cdc_buffered = False,
rx_cdc_depth = 32,
rx_cdc_buffered = False):
assert dw%8 == 0
assert interface in ["crossbar", "wishbone", "hybrid"]
@ -31,7 +36,11 @@ class LiteEthMAC(Module, AutoCSR):
phy = phy,
dw = dw,
with_sys_datapath = with_sys_datapath,
with_preamble_crc = with_preamble_crc
with_preamble_crc = with_preamble_crc,
tx_cdc_depth = tx_cdc_depth,
tx_cdc_buffered = tx_cdc_buffered,
rx_cdc_depth = rx_cdc_depth,
rx_cdc_buffered = rx_cdc_buffered
)
self.csrs = []
if interface == "crossbar":

View File

@ -5,6 +5,7 @@
# Copyright (c) 2015-2017 Sebastien Bourdeauducq <sb@m-labs.hk>
# Copyright (c) 2021 David Sawatzke <d-git@sawatzke.dev>
# Copyright (c) 2017-2018 whitequark <whitequark@whitequark.org>
# Copyright (c) 2023 LumiGuide Fietsdetectie B.V. <goemansrowan@gmail.com>
# SPDX-License-Identifier: BSD-2-Clause
from liteeth.common import *
@ -21,7 +22,12 @@ class LiteEthMACCore(Module, AutoCSR):
def __init__(self, phy, dw,
with_sys_datapath = False,
with_preamble_crc = True,
with_padding = True):
with_padding = True,
tx_cdc_depth = 32,
tx_cdc_buffered = False,
rx_cdc_depth = 32,
rx_cdc_buffered = False,
):
# Endpoints.
self.sink = stream.Endpoint(eth_phy_description(dw))
@ -57,7 +63,9 @@ class LiteEthMACCore(Module, AutoCSR):
tx_cdc = stream.ClockDomainCrossing(eth_phy_description(core_dw),
cd_from = "sys",
cd_to = "eth_tx",
depth = 32)
depth = tx_cdc_depth,
buffered = tx_cdc_buffered
)
self.submodules += tx_cdc
self.pipeline.append(tx_cdc)
@ -186,7 +194,9 @@ class LiteEthMACCore(Module, AutoCSR):
rx_cdc = stream.ClockDomainCrossing(eth_phy_description(core_dw),
cd_from = "eth_rx",
cd_to = "sys",
depth = 32)
depth = rx_cdc_depth,
buffered = rx_cdc_buffered
)
self.submodules += rx_cdc
self.pipeline.append(rx_cdc)

View File

@ -148,7 +148,7 @@ class LiteEthPHYRGMIIRX(LiteXModule):
# LiteEth PHY RGMII CRG ----------------------------------------------------------------------------
class LiteEthPHYRGMIICRG(LiteXModule):
def __init__(self, clock_pads, pads, with_hw_init_reset, tx_delay=2e-9):
def __init__(self, clock_pads, pads, with_hw_init_reset, tx_delay=2e-9, with_phy_tx_clock = None):
self._reset = CSRStorage()
# # #
@ -159,7 +159,14 @@ class LiteEthPHYRGMIICRG(LiteXModule):
# TX Clock
self.cd_eth_tx = ClockDomain()
self.comb += self.cd_eth_tx.clk.eq(self.cd_eth_rx.clk)
if isinstance(with_phy_tx_clock, Signal):
phy_tx_clock = with_phy_tx_clock
else:
phy_tx_clock = self.cd_eth_rx.clk
self.comb += self.cd_eth_tx.clk.eq(phy_tx_clock)
tx_delay_taps = int(tx_delay/25e-12) # 25ps per tap
assert tx_delay_taps < 128
@ -201,8 +208,10 @@ class LiteEthPHYRGMII(LiteXModule):
def __init__(self, clock_pads, pads, with_hw_init_reset=True,
tx_delay = 2e-9,
rx_delay = 2e-9,
with_inband_status = True):
self.crg = LiteEthPHYRGMIICRG(clock_pads, pads, with_hw_init_reset, tx_delay)
with_inband_status = True,
with_phy_tx_clock = None
):
self.crg = LiteEthPHYRGMIICRG(clock_pads, pads, with_hw_init_reset, tx_delay, with_phy_tx_clock)
self.tx = ClockDomainsRenamer("eth_tx")(LiteEthPHYRGMIITX(pads))
self.rx = ClockDomainsRenamer("eth_rx")(LiteEthPHYRGMIIRX(pads, rx_delay, with_inband_status))
self.sink, self.source = self.tx.sink, self.rx.source