build/xilinx: add disable_constraints parameter to Platform.add_ip.
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 7 May 2020 09:34:26 +0000 (11:34 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 7 May 2020 09:34:26 +0000 (11:34 +0200)
When integrate .xci, we don't necessarily want to apply the default timing/loc
constrants generated by Vivado but our custom ones. Setting disable_constraints
to True allow disabling .xdc generated by the IP.

litex/build/xilinx/platform.py
litex/build/xilinx/vivado.py

index d5e3d8f854541b18c9fb1cc71226d738ea1e415b..c2b769ffa8bf79c269e21bf473e0cf520f7ea8ee 100644 (file)
@@ -15,7 +15,7 @@ class XilinxPlatform(GenericPlatform):
     def __init__(self, *args, toolchain="ise", **kwargs):
         GenericPlatform.__init__(self, *args, **kwargs)
         self.edifs = set()
-        self.ips   = set()
+        self.ips   = {}
         if toolchain == "ise":
             self.toolchain = ise.XilinxISEToolchain()
         elif toolchain == "vivado":
@@ -26,8 +26,8 @@ class XilinxPlatform(GenericPlatform):
     def add_edif(self, filename):
         self.edifs.add((os.path.abspath(filename)))
 
-    def add_ip(self, filename):
-        self.ips.add((os.path.abspath(filename)))
+    def add_ip(self, filename, disable_constraints=False):
+        self.ips.update({os.path.abspath(filename): disable_constraints})
 
     def get_verilog(self, *args, special_overrides=dict(), **kwargs):
         so = dict(common.xilinx_special_overrides)
index 70cf5c808305a4d54ef84db6da8c041cf3436fdc..ac43dfc74591db50f2367af30386b2f596b6186e 100644 (file)
@@ -155,7 +155,7 @@ class XilinxVivadoToolchain:
 
         # Add IPs
         tcl.append("\n# Add IPs\n")
-        for filename in platform.ips:
+        for filename, disable_constraints in platform.ips.items():
             filename_tcl = "{" + filename + "}"
             ip = os.path.splitext(os.path.basename(filename))[0]
             tcl.append("read_ip " + filename_tcl)
@@ -163,6 +163,8 @@ class XilinxVivadoToolchain:
             tcl.append("generate_target all [get_ips {}]".format(ip))
             tcl.append("synth_ip [get_ips {}] -force".format(ip))
             tcl.append("get_files -all -of_objects [get_files {}]".format(filename_tcl))
+            if disable_constraints:
+                tcl.append("set_property is_enabled false [get_files -of_objects [get_files {}] -filter {{FILE_TYPE == XDC}}]".format(filename_tcl))
 
         # Add constraints
         tcl.append("\n# Add constraints\n")