From f2369a4c9eeb19862dcae538d6d7f72148070a66 Mon Sep 17 00:00:00 2001 From: Martin Cornil Date: Thu, 10 Oct 2019 14:06:37 +0200 Subject: [PATCH] Add system Verilog support for the Vivado builder --- litex/build/generic_platform.py | 6 ++---- litex/build/tools.py | 4 +++- litex/build/xilinx/vivado.py | 10 ++++++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/litex/build/generic_platform.py b/litex/build/generic_platform.py index 7ea71752e..50af71275 100644 --- a/litex/build/generic_platform.py +++ b/litex/build/generic_platform.py @@ -334,7 +334,7 @@ class GenericPlatform: for f in filenames: self.add_source(os.path.join(path, f), language, library) - def add_source_dir(self, path, recursive=True, library=None): + def add_source_dir(self, path, recursive=True, language=None, library=None): dir_files = [] if recursive: for root, dirs, files in os.walk(path): @@ -345,9 +345,7 @@ class GenericPlatform: if os.path.isfile(os.path.join(path, item)): dir_files.append(os.path.join(path, item)) for filename in dir_files: - language = tools.language_by_filename(filename) - if language is not None: - self.add_source(filename, language, library) + self.add_source(filename, language, library) def add_verilog_include_path(self, path): self.verilog_include_paths.add(os.path.abspath(path)) diff --git a/litex/build/tools.py b/litex/build/tools.py index 813262012..7a5bbbd06 100644 --- a/litex/build/tools.py +++ b/litex/build/tools.py @@ -19,8 +19,10 @@ def language_by_filename(name): extension = name.rsplit(".")[-1] if extension in ["v", "vh", "vo"]: return "verilog" - if extension in ["vhd", "vhdl", "vho"]: + elif extension in ["vhd", "vhdl", "vho"]: return "vhdl" + elif extension in ["sv"]: + return "systemverilog" return None diff --git a/litex/build/xilinx/vivado.py b/litex/build/xilinx/vivado.py index f22b44c92..540e030f1 100644 --- a/litex/build/xilinx/vivado.py +++ b/litex/build/xilinx/vivado.py @@ -126,10 +126,16 @@ class XilinxVivadoToolchain: # "-include_dirs {}" crashes Vivado 2016.4 for filename, language, library in sources: filename_tcl = "{" + filename + "}" - tcl.append("add_files " + filename_tcl) - if language == "vhdl": + if ("systemverilog" == language): + tcl.append("read_verilog -sv " + filename_tcl) + elif ("verilog" == language): + tcl.append("read_verilog " + filename_tcl) + elif ("vhdl" == language): + tcl.append("read_vhdl " + filename_tcl) tcl.append("set_property library {} [get_files {}]" .format(library, filename_tcl)) + else: + tcl.append("add_files " + filename_tcl) for filename in edifs: filename_tcl = "{" + filename + "}" tcl.append("read_edif " + filename_tcl)