Merge pull request #26 from q3k/diamond-linux-support

Add Diamond toolchain support for Linux.
This commit is contained in:
enjoy-digital 2017-07-20 14:41:05 +02:00 committed by GitHub
commit f25e46c428
2 changed files with 21 additions and 5 deletions

View File

@ -56,19 +56,31 @@ def _build_files(device, sources, vincpaths, build_name):
tcl.append("prj_run Map -impl implementation") tcl.append("prj_run Map -impl implementation")
tcl.append("prj_run PAR -impl implementation") tcl.append("prj_run PAR -impl implementation")
tcl.append("prj_run Export -impl implementation -task Bitgen") tcl.append("prj_run Export -impl implementation -task Bitgen")
tcl.append("prj_run Export -impl implementation -task Jedecgen")
tools.write_to_file(build_name + ".tcl", "\n".join(tcl)) tools.write_to_file(build_name + ".tcl", "\n".join(tcl))
def _run_diamond(build_name, source, ver=None): def _run_diamond(build_name, toolchain_path, ver=None):
if sys.platform == "win32" or sys.platform == "cygwin": if sys.platform == "win32" or sys.platform == "cygwin":
build_script_contents = "REM Autogenerated by LiteX\n" build_script_contents = "REM Autogenerated by LiteX\n"
build_script_contents = "pnmainc " + build_name + ".tcl\n" build_script_contents += "pnmainc " + build_name + ".tcl\n"
build_script_file = "build_" + build_name + ".bat" build_script_file = "build_" + build_name + ".bat"
tools.write_to_file(build_script_file, build_script_contents) tools.write_to_file(build_script_file, build_script_contents)
r = subprocess.call([build_script_file]) r = subprocess.call([build_script_file])
shutil.copy(os.path.join("implementation", build_name + "_implementation.bit"), build_name + ".bit") shutil.copy(os.path.join("implementation", build_name + "_implementation.bit"), build_name + ".bit")
shutil.copy(os.path.join("implementation", build_name + "_implementation.jed"), build_name + ".jed") shutil.copy(os.path.join("implementation", build_name + "_implementation.jed"), build_name + ".jed")
elif sys.platform == "linux":
bindir = os.path.join(toolchain_path, 'bin/lin64')
envfile = os.path.join(bindir, 'diamond_env')
build_script_contents = "# Autogenerated by LiteX\n"
build_script_contents += "set -e\n"
build_script_contents += "bindir='{}/'\n".format(bindir)
build_script_contents += "source {}\n".format(envfile)
build_script_contents += "diamondc {}.tcl | tee build.log\n".format(build_name)
build_script_file = "build_{}.sh".format(build_name)
tools.write_to_file(build_script_file, build_script_contents)
r = subprocess.call(['/bin/sh', build_script_file])
shutil.copy(os.path.join("implementation", build_name + "_implementation.bit"), build_name + ".bit")
else: else:
raise NotImplementedError raise NotImplementedError

View File

@ -11,8 +11,12 @@ class LatticeProgrammer(GenericProgrammer):
def __init__(self, xcf_template): def __init__(self, xcf_template):
self.xcf_template = xcf_template self.xcf_template = xcf_template
def load_bitstream(self, bitstream_file): def load_bitstream(self, bitstream_file, toolchain_path=''):
xcf_file = bitstream_file.replace(".bit", ".xcf") xcf_file = bitstream_file.replace(".bit", ".xcf")
xcf_content = self.xcf_template.format(bitstream_file=bitstream_file) xcf_content = self.xcf_template.format(bitstream_file=bitstream_file)
tools.write_to_file(xcf_file, xcf_content) tools.write_to_file(xcf_file, xcf_content)
subprocess.call(["pgrcmd", "-infile", xcf_file]) if toolchain_path:
pgrcmd = os.path.join(toolchain_path, 'bin/lin64/pgrcmd')
else:
pgrcmr = 'pgrcmr'
subprocess.call([pgrcmd, "-infile", xcf_file])