Merge pull request #2145 from trabucayre/litex_vhd2vconvert_instance
build/vhd2v_converter: allows using an instance instead of entity_name + params
This commit is contained in:
commit
6228d2b024
|
@ -37,6 +37,8 @@ class VHD2VConverter(Module):
|
||||||
_params: dict
|
_params: dict
|
||||||
Instance like params (p_ generics, o_ output, ...) when add_instance,
|
Instance like params (p_ generics, o_ output, ...) when add_instance,
|
||||||
generics without prefix otherwise
|
generics without prefix otherwise
|
||||||
|
_instance: class Instance
|
||||||
|
Another instance to convert
|
||||||
_add_instance: bool
|
_add_instance: bool
|
||||||
add if True an Instance()
|
add if True an Instance()
|
||||||
_force_convert: bool
|
_force_convert: bool
|
||||||
|
@ -46,11 +48,12 @@ class VHD2VConverter(Module):
|
||||||
_libraries: list of str or tuple
|
_libraries: list of str or tuple
|
||||||
list of libraries (library_name, library_path) to compile before conversion.
|
list of libraries (library_name, library_path) to compile before conversion.
|
||||||
"""
|
"""
|
||||||
def __init__(self, platform, top_entity, build_dir,
|
def __init__(self, platform, top_entity=None, build_dir=None,
|
||||||
work_package = None,
|
work_package = None,
|
||||||
force_convert = False,
|
force_convert = False,
|
||||||
add_instance = False,
|
add_instance = False,
|
||||||
params = dict(),
|
params = None,
|
||||||
|
instance = None,
|
||||||
files = list(),
|
files = list(),
|
||||||
libraries = list()):
|
libraries = list()):
|
||||||
"""
|
"""
|
||||||
|
@ -62,11 +65,17 @@ class VHD2VConverter(Module):
|
||||||
self._platform = platform
|
self._platform = platform
|
||||||
self._sources = files
|
self._sources = files
|
||||||
self._params = params
|
self._params = params
|
||||||
|
self._instance = instance
|
||||||
self._force_convert = force_convert
|
self._force_convert = force_convert
|
||||||
self._add_instance = add_instance
|
self._add_instance = add_instance
|
||||||
self._work_package = work_package
|
self._work_package = work_package
|
||||||
self._libraries = list()
|
self._libraries = list()
|
||||||
|
|
||||||
|
assert (self._params is None) ^ (self._instance is None)
|
||||||
|
|
||||||
|
if self._instance is not None and self._top_entity is None:
|
||||||
|
self._top_entity = self._instance.name_override
|
||||||
|
|
||||||
self._ghdl_opts = ["--std=08", "--no-formal"]
|
self._ghdl_opts = ["--std=08", "--no-formal"]
|
||||||
|
|
||||||
if work_package is not None:
|
if work_package is not None:
|
||||||
|
@ -124,6 +133,9 @@ class VHD2VConverter(Module):
|
||||||
"""
|
"""
|
||||||
inst_name = self._top_entity
|
inst_name = self._top_entity
|
||||||
|
|
||||||
|
if self._build_dir is None:
|
||||||
|
self._build_dir = os.path.join(os.path.abspath(self._platform.output_dir), "vhd2v")
|
||||||
|
|
||||||
# platform able to synthesis verilog and vhdl -> no conversion
|
# platform able to synthesis verilog and vhdl -> no conversion
|
||||||
if self._platform.support_mixed_language and not self._force_convert:
|
if self._platform.support_mixed_language and not self._force_convert:
|
||||||
ip_params = self._params
|
ip_params = self._params
|
||||||
|
@ -159,13 +171,21 @@ class VHD2VConverter(Module):
|
||||||
|
|
||||||
verilog_out = os.path.join(self._build_dir, f"{inst_name}.v")
|
verilog_out = os.path.join(self._build_dir, f"{inst_name}.v")
|
||||||
|
|
||||||
ip_params = dict()
|
|
||||||
generics = []
|
generics = []
|
||||||
|
if self._params:
|
||||||
|
ip_params = dict()
|
||||||
for k, v in self._params.items():
|
for k, v in self._params.items():
|
||||||
if k.startswith("p_"):
|
if k.startswith("p_"):
|
||||||
generics.append("-g" + k[2:] + "=" + str(v))
|
generics.append("-g" + k[2:] + "=" + str(v))
|
||||||
else:
|
else:
|
||||||
ip_params[k] = v
|
ip_params[k] = v
|
||||||
|
else:
|
||||||
|
ip_params = list()
|
||||||
|
for item in self._instance.items:
|
||||||
|
if isinstance(item, Instance.Parameter):
|
||||||
|
generics.append("-g" + item.name + "=" + str(item.value.value))
|
||||||
|
else:
|
||||||
|
ip_params.append(item)
|
||||||
|
|
||||||
cmd = ["ghdl", "--synth", "--out=verilog"]
|
cmd = ["ghdl", "--synth", "--out=verilog"]
|
||||||
cmd += self._ghdl_opts
|
cmd += self._ghdl_opts
|
||||||
|
@ -185,4 +205,9 @@ class VHD2VConverter(Module):
|
||||||
self._platform.add_source(verilog_out)
|
self._platform.add_source(verilog_out)
|
||||||
|
|
||||||
if self._add_instance:
|
if self._add_instance:
|
||||||
|
if self._instance:
|
||||||
|
# remove current instance to avoid multiple definition
|
||||||
|
delattr(self, "_instance")
|
||||||
|
self.specials += Instance(inst_name, *ip_params)
|
||||||
|
else:
|
||||||
self.specials += Instance(inst_name, **ip_params)
|
self.specials += Instance(inst_name, **ip_params)
|
||||||
|
|
Loading…
Reference in New Issue