diff --git a/litex_boards/targets/colorlight_5a_75b.py b/litex_boards/targets/colorlight_5a_75b.py index 3e56d52..cd5c390 100755 --- a/litex_boards/targets/colorlight_5a_75b.py +++ b/litex_boards/targets/colorlight_5a_75b.py @@ -30,8 +30,6 @@ from litex.soc.integration.soc_core import * from litex.soc.integration.builder import * from liteeth.phy.ecp5rgmii import LiteEthPHYRGMII -from liteeth.core import LiteEthUDPIPCore -from liteeth.frontend.etherbone import LiteEthEtherbone # CRG ---------------------------------------------------------------------------------------------- @@ -56,7 +54,7 @@ class _CRG(Module): # BaseSoC ------------------------------------------------------------------------------------------ class BaseSoC(SoCCore): - def __init__(self, revision, **kwargs): + def __init__(self, revision, with_ethernet=False, with_etherbone=False, **kwargs): platform = colorlight_5a_75b.Platform(revision=revision) sys_clk_freq = int(125e6) @@ -66,42 +64,27 @@ class BaseSoC(SoCCore): # CRG -------------------------------------------------------------------------------------- self.submodules.crg = _CRG(platform, sys_clk_freq) + # Ethernet --------------------------------------------------------------------------------- + if with_ethernet: + self.submodules.ethphy = LiteEthPHYRGMII( + clock_pads = self.platform.request("eth_clocks"), + pads = self.platform.request("eth")) + self.add_csr("ethphy") + self.add_ethernet(phy=self.ethphy) + + # Etherbone -------------------------------------------------------------------------------- + if with_etherbone: + self.submodules.ethphy = LiteEthPHYRGMII( + clock_pads = self.platform.request("eth_clocks"), + pads = self.platform.request("eth")) + self.add_csr("ethphy") + self.add_etherbone(phy=self.ethphy) + # Led -------------------------------------------------------------------------------------- led_counter = Signal(32) self.sync += led_counter.eq(led_counter + 1) self.comb += platform.request("user_led_n", 0).eq(led_counter[26]) -# EtherboneSoC ------------------------------------------------------------------------------------- - -class EtherboneSoC(BaseSoC): - def __init__(self, eth_phy=0, **kwargs): - BaseSoC.__init__(self, **kwargs) - - # Ethernet --------------------------------------------------------------------------------- - # phy - self.submodules.ethphy = LiteEthPHYRGMII( - clock_pads = self.platform.request("eth_clocks", eth_phy), - pads = self.platform.request("eth", eth_phy), - tx_delay = 0e-9, # 0ns FPGA delay (Clk delay added by PHY) - rx_delay = 2e-9) # 2ns FPGA delay to compensate Clk routing to IDDRX1F - self.add_csr("ethphy") - # core - self.submodules.ethcore = LiteEthUDPIPCore( - phy = self.ethphy, - mac_address = 0x10e2d5000000, - ip_address = "192.168.1.50", - clk_freq = self.clk_freq) - # etherbone - self.submodules.etherbone = LiteEthEtherbone(self.ethcore.udp, 1234) - self.add_wb_master(self.etherbone.wishbone.bus) - # timing constraints - self.platform.add_period_constraint(self.ethphy.crg.cd_eth_rx.clk, 1e9/125e6) - self.platform.add_period_constraint(self.ethphy.crg.cd_eth_tx.clk, 1e9/125e6) - self.platform.add_false_path_constraints( - self.crg.cd_sys.clk, - self.ethphy.crg.cd_eth_rx.clk, - self.ethphy.crg.cd_eth_tx.clk) - # Load --------------------------------------------------------------------------------------------- def load(): @@ -129,6 +112,7 @@ def main(): soc_core_args(parser) trellis_args(parser) parser.add_argument("--revision", default="7.0", type=str, help="Board revision 7.0 (default) or 6.1") + parser.add_argument("--with-ethernet", action="store_true", help="enable Ethernet support") parser.add_argument("--with-etherbone", action="store_true", help="enable Etherbone support") parser.add_argument("--eth-phy", default=0, type=int, help="Ethernet PHY 0 or 1 (default=0)") parser.add_argument("--load", action="store_true", help="load bitstream") @@ -137,10 +121,11 @@ def main(): if args.load: load() - if args.with_etherbone: - soc = EtherboneSoC(eth_phy=args.eth_phy, revision=args.revision, **soc_core_argdict(args)) - else: - soc = BaseSoC(args.revision, **soc_core_argdict(args)) + assert not (args.with_ethernet and args.with_etherbone) + soc = BaseSoC(revision=args.revision, + with_ethernet = args.with_ethernet, + with_etherbone = args.with_etherbone, + **soc_core_argdict(args)) builder = Builder(soc, **builder_argdict(args)) builder.build(**trellis_argdict(args))