You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
import os
|
|
|
|
from litex.build.generic_platform import GenericPlatform
|
|
from litex.build.xilinx import common, vivado, ise, symbiflow
|
|
|
|
from migen.fhdl.structure import _Fragment
|
|
|
|
class VirtualPlatform(GenericPlatform):
|
|
|
|
def __init__(self, *args, toolchain='ise', **kwargs):
|
|
GenericPlatform.__init__(self, *args, **kwargs)
|
|
#self.edifs = set()
|
|
#self.ips = {}
|
|
#if toolchain == "ise":
|
|
# self.toolchain = ise.XilinxISEToolchain()
|
|
#elif toolchain == "vivado":
|
|
# self.toolchain = vivado.XilinxVivadoToolchain()
|
|
#elif toolchain == "symbiflow":
|
|
# self.toolchain = symbiflow.SymbiflowToolchain()
|
|
#else:
|
|
# raise ValueError("Unknown toolchain")
|
|
|
|
#def add_edif(self, filename):
|
|
# pass
|
|
#self.edifs.add((os.path.abspath(filename)))
|
|
|
|
#def add_ip(self, filename, disable_constraints=False):
|
|
# pass
|
|
#self.ips.update({os.path.abspath(filename): disable_constraints})
|
|
|
|
def get_verilog(self, *args, special_overrides=dict(), **kwargs):
|
|
return GenericPlatform.get_verilog(self, *args)
|
|
|
|
#def get_edif(self, fragment, **kwargs):
|
|
# pass
|
|
#return GenericPlatform.get_edif(self, fragment, "UNISIMS", "Xilinx", self.device, **kwargs)
|
|
|
|
def build(self, *args, **kwargs):
|
|
return self.toolchain_build(self, *args, **kwargs)
|
|
|
|
def add_period_constraint(self, clk, period):
|
|
pass
|
|
#if clk is None: return
|
|
#if hasattr(clk, "p"):
|
|
# clk = clk.p
|
|
#self.toolchain.add_period_constraint(self, clk, period)
|
|
|
|
#def add_false_path_constraint(self, from_, to):
|
|
# pass
|
|
#if hasattr(from_, "p"):
|
|
# from_ = from_.p
|
|
#if hasattr(to, "p"):
|
|
# to = to.p
|
|
#self.toolchain.add_false_path_constraint(self, from_, to)
|
|
|
|
def toolchain_build(self, platform, fragment,
|
|
build_dir = 'build',
|
|
build_name = 'virtual', #doesnt do anything!!!
|
|
**kwargs):
|
|
|
|
# Create build directory
|
|
os.makedirs(build_dir, exist_ok=True)
|
|
cwd = os.getcwd()
|
|
os.chdir(build_dir)
|
|
|
|
# Finalize design
|
|
if not isinstance(fragment, _Fragment):
|
|
fragment = fragment.get_fragment()
|
|
platform.finalize(fragment)
|
|
|
|
# Generate verilog
|
|
v_output = platform.get_verilog(fragment, name=build_name, **kwargs)
|
|
named_sc, named_pc = platform.resolve_signals(v_output.ns)
|
|
v_file = build_name + ".v"
|
|
v_output.write(v_file)
|
|
platform.add_source(v_file)
|
|
|
|
os.chdir(cwd)
|
|
|
|
return v_output.ns |