From: Florent Kermarrec Date: Tue, 5 May 2020 09:23:46 +0000 (+0200) Subject: build/platform: allow doing a loose lookup_request (return None instead of Constraint... X-Git-Tag: 24jan2021_ls180~389 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d0b8daa005c332b97e3014576b4e6aabfaeccef1;p=litex.git build/platform: allow doing a loose lookup_request (return None instead of ConstraintError) and allow subname in lookup_request. In the platforms, insead of doing: self.lookup_request("eth_clocks").rx we can now do: self.lookup_request("eth_clocks:rx") This allows some try/except simplifications on constraints. --- diff --git a/litex/build/altera/platform.py b/litex/build/altera/platform.py index a95dcf4b..2f03fc72 100644 --- a/litex/build/altera/platform.py +++ b/litex/build/altera/platform.py @@ -33,6 +33,7 @@ class AlteraPlatform(GenericPlatform): return self.toolchain.build(self, *args, **kwargs) def add_period_constraint(self, clk, period): + if clk is None: return if hasattr(clk, "p"): clk = clk.p self.toolchain.add_period_constraint(self, clk, period) diff --git a/litex/build/generic_platform.py b/litex/build/generic_platform.py index d540cc38..7c489efe 100644 --- a/litex/build/generic_platform.py +++ b/litex/build/generic_platform.py @@ -205,13 +205,21 @@ class ConstraintManager: self.matched.append((resource, obj)) return obj - def lookup_request(self, name, number=None): + def lookup_request(self, name, number=None, loose=False): + subname = None + if ":" in name: name, subname = name.split(":") for resource, obj in self.matched: if resource[0] == name and (number is None or resource[1] == number): - return obj + if subname is not None: + return getattr(obj, subname) + else: + return obj - raise ConstraintError("Resource not found: {}:{}".format(name, number)) + if loose: + return None + else: + raise ConstraintError("Resource not found: {}:{}".format(name, number)) def add_platform_command(self, command, **signals): self.platform_commands.append((command, signals)) diff --git a/litex/build/lattice/platform.py b/litex/build/lattice/platform.py index 71ff2a65..7380b45e 100644 --- a/litex/build/lattice/platform.py +++ b/litex/build/lattice/platform.py @@ -34,6 +34,7 @@ class LatticePlatform(GenericPlatform): return self.toolchain.build(self, *args, **kwargs) def add_period_constraint(self, clk, period): + if clk is None: return if hasattr(clk, "p"): clk = clk.p self.toolchain.add_period_constraint(self, clk, period) diff --git a/litex/build/microsemi/platform.py b/litex/build/microsemi/platform.py index 65d2c996..c8f13bd8 100644 --- a/litex/build/microsemi/platform.py +++ b/litex/build/microsemi/platform.py @@ -28,6 +28,7 @@ class MicrosemiPlatform(GenericPlatform): return self.toolchain.build(self, *args, **kwargs) def add_period_constraint(self, clk, period): + if clk is None: return clk.attr.add("keep") if hasattr(clk, "p"): clk = clk.p diff --git a/litex/build/xilinx/platform.py b/litex/build/xilinx/platform.py index cf7bbeb5..d5e3d8f8 100644 --- a/litex/build/xilinx/platform.py +++ b/litex/build/xilinx/platform.py @@ -48,6 +48,7 @@ class XilinxPlatform(GenericPlatform): return self.toolchain.build(self, *args, **kwargs) def add_period_constraint(self, clk, period): + if clk is None: return if hasattr(clk, "p"): clk = clk.p self.toolchain.add_period_constraint(self, clk, period)