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

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