build/microsemi/libero_soc: associate timings constraints with synthesis/place&route...
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Fri, 23 Nov 2018 08:30:13 +0000 (09:30 +0100)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Fri, 23 Nov 2018 08:30:13 +0000 (09:30 +0100)
litex/build/microsemi/libero_soc.py

index 92bc943b031b299ca98ad593b230337194600bc7..e463d8295e298774f4f017f7af77fb9bd8efe30f 100644 (file)
@@ -12,9 +12,11 @@ from litex.build.generic_platform import *
 from litex.build import tools
 from litex.build.microsemi import common
 
+
 def tcl_name(name):
     return "{" + name + "}"
 
+
 def _format_io_constraint(c):
     if isinstance(c, Pins):
         return "-pin_name {} ".format(c.identifiers[0])
@@ -111,19 +113,30 @@ def _build_tcl(platform, sources, build_dir, build_name):
         if file.endswith(".init"):
             tcl.append("file copy -- {} impl/synthesis".format(file))
 
-    # import io / fp constraints
+    # import io constraints
     tcl.append("import_files -io_pdc {}".format(tcl_name(build_name + "_io.pdc")))
+
+    # import floorplanner constraints
     tcl.append("import_files -fp_pdc {}".format(tcl_name(build_name + "_fp.pdc")))
+
+    # import timing constraints
+    tcl.append("import_files -convert_EDN_to_HDL 0 -sdc {}".format(tcl_name(build_name + ".sdc")))
+
+    # associate constraints with tools
+    tcl.append(" ".join(["organize_tool_files",
+        "-tool {SYNTHESIZE}",
+        "-file impl/constraint/{}.sdc".format(build_name),
+        "-module {}".format(build_name),
+        "-input_type {constraint}"
+    ]))
     tcl.append(" ".join(["organize_tool_files",
         "-tool {PLACEROUTE}",
         "-file impl/constraint/io/{}_io.pdc".format(build_name),
         "-file impl/constraint/fp/{}_fp.pdc".format(build_name),
+        "-file impl/constraint/{}.sdc".format(build_name),
         "-module {}".format(build_name),
         "-input_type {constraint}"
     ]))
-
-    # import timing constraints
-    tcl.append("import_files -convert_EDN_to_HDL 0 -sdc {}".format(tcl_name(build_name + ".sdc")))
     tcl.append(" ".join(["organize_tool_files",
         "-tool {VERIFYTIMING}",
         "-file impl/constraint/{}.sdc".format(build_name),
@@ -161,6 +174,7 @@ def _build_timing_sdc(vns, clocks, false_paths, build_name, additional_timing_co
     sdc += additional_timing_constraints
     tools.write_to_file(build_name + ".sdc", "\n".join(sdc))
 
+
 def _build_script(build_name, device, toolchain_path, ver=None):
     if sys.platform in ("win32", "cygwin"):
         script_ext = ".bat"