build/microsemi/libero_soc: add additional_constraints
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 22 Nov 2018 17:40:19 +0000 (18:40 +0100)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 22 Nov 2018 17:40:19 +0000 (18:40 +0100)
litex/build/microsemi/libero_soc.py

index fca2d6fa12c80e337a616c5d213e461e7a479435..0d458292efc59586d7280646fdfb82dbf1e3d199 100644 (file)
@@ -102,11 +102,13 @@ def _build_tcl(platform, sources, build_dir, build_name):
         if file.endswith(".init"):
             tcl.append("file copy -- {} impl/synthesis".format(file))
 
-    # import io constraints
+    # import io / placement constraints
     tcl.append("import_files -io_pdc {{{}}}".format(build_name + ".pdc"))
+    tcl.append("import_files -fp_pdc {{{}}}".format(build_name + "_additional.pdc"))
     tcl.append(" ".join(["organize_tool_files",
         "-tool {PLACEROUTE}",
         "-file impl/constraint/io/{}.pdc".format(build_name),
+        "-file impl/constraint/fp/{}_additional.pdc".format(build_name),
         "-module {}".format(build_name),
         "-input_type {constraint}"
     ]))
@@ -193,6 +195,7 @@ class MicrosemiLiberoSoCPolarfireToolchain:
     def __init__(self):
         self.clocks = dict()
         self.false_paths = set()
+        self.additional_constraints = []
 
     def build(self, platform, fragment, build_dir="build", build_name="top",
               toolchain_path=None, run=False, **kwargs):
@@ -217,6 +220,9 @@ class MicrosemiLiberoSoCPolarfireToolchain:
         # generate design io constraints (pdc)
         _build_pdc(named_sc, named_pc, build_name)
 
+        # generate design additional constraints (pdc)
+        tools.write_to_file(build_name + "_additional.pdc", "\n".join(self.additional_constraints))
+
         # generate design timing constraints (sdc)
         _build_sdc(top_output.ns, self.clocks, self.false_paths, build_name)