Add core CDC depth and buffered parameters.
This commit is contained in:
parent
97dccdb294
commit
641c5dbdc7
|
@ -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.
|
||||
# ----
|
||||
|
|
|
@ -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
|
||||
|
||||
"""
|
||||
|
@ -233,9 +234,13 @@ class PHYCore(SoCMini):
|
|||
class MACCore(PHYCore):
|
||||
def __init__(self, platform, core_config):
|
||||
# Parameters -------------------------------------------------------------------------------
|
||||
nrxslots = core_config.get("nrxslots", 2)
|
||||
ntxslots = core_config.get("ntxslots", 2)
|
||||
bus_standard = core_config["core"]
|
||||
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 --------------------------------------------------------------------------------------
|
||||
|
@ -243,13 +248,18 @@ class MACCore(PHYCore):
|
|||
|
||||
# MAC --------------------------------------------------------------------------------------
|
||||
self.submodules.ethmac = ethmac = LiteEthMAC(
|
||||
phy = self.ethphy,
|
||||
dw = 32,
|
||||
interface = "wishbone",
|
||||
endianness = core_config["endianness"],
|
||||
nrxslots = nrxslots,
|
||||
ntxslots = ntxslots,
|
||||
full_memory_we = core_config.get("full_memory_we", False))
|
||||
phy = self.ethphy,
|
||||
dw = 32,
|
||||
interface = "wishbone",
|
||||
endianness = core_config["endianness"],
|
||||
nrxslots = nrxslots,
|
||||
ntxslots = ntxslots,
|
||||
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 -----------------------------------------------------------------------
|
||||
|
@ -280,6 +290,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)
|
||||
|
@ -304,6 +318,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
|
||||
|
||||
)
|
||||
|
||||
# UDP Ports --------------------------------------------------------------------------------
|
||||
|
|
|
@ -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":
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue