diff --git a/litex/soc/integration/soc.py b/litex/soc/integration/soc.py index a91c1ee3d..6e8202f20 100644 --- a/litex/soc/integration/soc.py +++ b/litex/soc/integration/soc.py @@ -1397,9 +1397,10 @@ class LiteXSoC(SoC): # Add Ethernet --------------------------------------------------------------------------------- def add_ethernet(self, name="ethmac", phy=None, phy_cd="eth", dynamic_ip=False, software_debug=False, - nrxslots = 2, - ntxslots = 2, - with_timestamp = False): + nrxslots = 2, + ntxslots = 2, + with_timestamp = False, + with_timing_constraints = True): # Imports from liteeth.mac import LiteEthMAC from liteeth.phy.model import LiteEthPHYModel @@ -1430,14 +1431,6 @@ class LiteXSoC(SoC): if self.irq.enabled: self.irq.add(name, use_loc_if_exists=True) - # Timing constraints - eth_rx_clk = getattr(phy, "crg", phy).cd_eth_rx.clk - eth_tx_clk = getattr(phy, "crg", phy).cd_eth_tx.clk - if not isinstance(phy, LiteEthPHYModel): - self.platform.add_period_constraint(eth_rx_clk, 1e9/phy.rx_clk_freq) - self.platform.add_period_constraint(eth_tx_clk, 1e9/phy.tx_clk_freq) - self.platform.add_false_path_constraints(self.crg.cd_sys.clk, eth_rx_clk, eth_tx_clk) - # Dynamic IP (if enabled). if dynamic_ip: self.add_constant("ETH_DYNAMIC_IP") @@ -1447,12 +1440,22 @@ class LiteXSoC(SoC): self.add_constant("ETH_UDP_TX_DEBUG") self.add_constant("ETH_UDP_RX_DEBUG") + # Timing constraints + if with_timing_constraints: + eth_rx_clk = getattr(phy, "crg", phy).cd_eth_rx.clk + eth_tx_clk = getattr(phy, "crg", phy).cd_eth_tx.clk + if not isinstance(phy, LiteEthPHYModel): + self.platform.add_period_constraint(eth_rx_clk, 1e9/phy.rx_clk_freq) + self.platform.add_period_constraint(eth_tx_clk, 1e9/phy.tx_clk_freq) + self.platform.add_false_path_constraints(self.crg.cd_sys.clk, eth_rx_clk, eth_tx_clk) + # Add Etherbone -------------------------------------------------------------------------------- def add_etherbone(self, name="etherbone", phy=None, phy_cd="eth", - mac_address = 0x10e2d5000000, - ip_address = "192.168.1.50", - udp_port = 1234, - buffer_depth = 4): + mac_address = 0x10e2d5000000, + ip_address = "192.168.1.50", + udp_port = 1234, + buffer_depth = 4, + with_timing_constraints = True): # Imports from liteeth.core import LiteEthUDPIPCore from liteeth.frontend.etherbone import LiteEthEtherbone @@ -1483,12 +1486,13 @@ class LiteXSoC(SoC): self.add_wb_master(etherbone.wishbone.bus) # Timing constraints - eth_rx_clk = getattr(phy, "crg", phy).cd_eth_rx.clk - eth_tx_clk = getattr(phy, "crg", phy).cd_eth_tx.clk - if not isinstance(phy, LiteEthPHYModel): - self.platform.add_period_constraint(eth_rx_clk, 1e9/phy.rx_clk_freq) - self.platform.add_period_constraint(eth_tx_clk, 1e9/phy.tx_clk_freq) - self.platform.add_false_path_constraints(self.crg.cd_sys.clk, eth_rx_clk, eth_tx_clk) + if with_timing_constraints: + eth_rx_clk = getattr(phy, "crg", phy).cd_eth_rx.clk + eth_tx_clk = getattr(phy, "crg", phy).cd_eth_tx.clk + if not isinstance(phy, LiteEthPHYModel): + self.platform.add_period_constraint(eth_rx_clk, 1e9/phy.rx_clk_freq) + self.platform.add_period_constraint(eth_tx_clk, 1e9/phy.tx_clk_freq) + self.platform.add_false_path_constraints(self.crg.cd_sys.clk, eth_rx_clk, eth_tx_clk) # Add SPI Flash -------------------------------------------------------------------------------- def add_spi_flash(self, name="spiflash", mode="4x", dummy_cycles=None, clk_freq=None, module=None, phy=None, rate="1:1", **kwargs):