def run(device, source, no_trce=False): """ Run diamond.sh with a given device name and source Verilog file """ env = os.environ.copy() if no_trce: env["NO_TRCE"] = "1" dsh_path = path.join(database.get_trellis_root(), "diamond.sh") return subprocess.run(["bash", dsh_path, device, source], env=env)
def main(): shutil.rmtree("work_tilegrid", ignore_errors=True) os.mkdir("work_tilegrid") shutil.copy( path.join(database.get_trellis_root(), "minitests", "wire", "wire.v"), "work_tilegrid/wire.v") for family in sorted(devices.families.keys()): for device in sorted(devices.families[family]["devices"].keys()): diamond.run(device, "work_tilegrid/wire.v") output_file = path.join(database.get_db_subdir(family, device), "tilegrid.json") extract_tilegrid.main([ "extract_tilegrid", "work_tilegrid/wire.tmp/output.test", output_file ])
def run(commands): """Run a list of Tcl commands, returning the output as a string""" dtcl_path = path.join(database.get_trellis_root(), "diamond_tcl.sh") workdir = tempfile.mkdtemp() scriptfile = path.join(workdir, "script.tcl") with open(scriptfile, 'w') as f: f.write('source $::env(FOUNDRY)/data/tcltool/IspTclDev.tcl\n') f.write('source $::env(FOUNDRY)/data/tcltool/IspTclCmd.tcl\n') for c in commands: f.write(c + '\n') result = subprocess.run(["bash", dtcl_path, scriptfile], cwd=workdir).returncode assert result == 0, "ispTcl returned non-zero status code {}".format(result) outfile = path.join(workdir, 'ispTcl.log') with open(outfile, 'r') as f: output = f.read() # Strip Lattice header delimiter = "-" * 80 output = output[output.rindex(delimiter)+81:].strip() # Strip Lattice pleasantry pleasantry = "Thank you for using ispTcl." output = output.replace(pleasantry, "").strip() return output
def run(device, source): """ Run diamond.sh with a given device name and source Verilog file """ dsh_path = path.join(database.get_trellis_root(), "diamond.sh") return subprocess.run(["bash", dsh_path, device, source])