Beispiel #1
0
def run(commands, workdir=None):
    """Run a list of Tcl commands, returning the output as a string"""
    rcmd_path = path.join(database.get_oxide_root(), "radiant_cmd.sh")
    if workdir is None:
        workdir = tempfile.mkdtemp()
    scriptfile = path.join(workdir, "script.tcl")
    with open(scriptfile, 'w') as f:
        for c in commands:
            f.write(c + '\n')
    env = os.environ.copy()
    env["LATCL_DEV_ENABLE"] = "1"
    result = subprocess.run(["bash", rcmd_path, "lapie", scriptfile],
                            cwd=workdir,
                            env=env).returncode
    # meh, fails sometimes
    # assert result == 0, "lapie returned non-zero status code {}".format(result)
    outfile = path.join(workdir, 'lapie.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"
    output = output[:output.find(pleasantry)].strip()
    return output
Beispiel #2
0
def run(device, source, struct_ver=True, raw_bit=False, pdcfile=None):
    """
    Run radiant.sh with a given device name and source Verilog file
    """
    env = os.environ.copy()
    if struct_ver:
        env["STRUCT_VER"] = "1"
    if raw_bit:
        env["GEN_RBT"] = "1"
    dsh_path = path.join(database.get_oxide_root(), "radiant.sh")
    return subprocess.run(["bash", dsh_path, device, source], env=env)
Beispiel #3
0
def main(argv):
    args = parser.parse_args(argv[1:])
    if not path.exists(args.fld):
        os.mkdir(args.fld)
    commit_hash = database.get_db_commit()
    build_dt = time.strftime('%Y-%m-%d %H:%M:%S')
    gen_docs_toc = ""
    gdir = path.join(args.fld, "general")
    if not path.exists(gdir):
        os.mkdir(gdir)
    for mdfile in glob.glob(path.join(database.get_oxide_root(), "docs", "general", "*.md")):
        with open(mdfile, "r") as f:
            if f.read(1) != "#":
                continue
            title = f.readline().strip()
        htmlfn = path.basename(mdfile).replace(".md", ".html")
        htmlfile = path.join(gdir, htmlfn)
        with open(htmlfile, "w") as f:
            f.write(libpyprjoxide.md_file_to_html(mdfile))
        gen_docs_toc += '<li><a href="general/{}">{}</a></li>\n'.format(htmlfn, title)
    docs_toc = ""
    for fam, fam_data in sorted(database.get_devices()["families"].items()):
        fdir = path.join(args.fld, fam)
        if not path.exists(fdir):
            os.mkdir(fdir)
        thdir = path.join(fdir, "tilehtml")
        if not path.exists(thdir):
            os.mkdir(thdir)
        bhdir = path.join(fdir, "belhtml")
        if not path.exists(bhdir):
            os.mkdir(bhdir)
        docs_toc += "<h3>{} Family</h3>".format(fam)
        docs_toc += "<h4>Generated Bitstream Documentation</h4>"
        docs_toc += "<ul>"
        tiles = get_device_tiles(fam, fam_data["devices"])
        for dev, devdata in sorted(fam_data["devices"].items()):
            if devdata["fuzz"]:
                ddir = path.join(fdir, dev)
                if not path.exists(ddir):
                    os.mkdir(ddir)
                print("********* Generating documentation for device {}".format(dev))
                generate_device_docs(fam, dev, ddir)
                if (fam, dev) in tiles:
                    for tile in tiles[fam, dev]:
                        print("*** Generating documentation for tile {}".format(tile))
                        generate_tile_docs(fam, dev, tile, fdir)
                docs_toc += '<li><a href="{}">{} Documentation</a></li>'.format(
                    '{}/{}/index.html'.format(fam, dev),
                    dev
                )

        docs_toc += "</ul>"

    index_html = Template(oxide_docs_index).substitute(
        datetime=build_dt,
        commit=commit_hash,
        docs_toc=docs_toc,
        gen_docs_toc=gen_docs_toc,
    )
    with open(path.join(args.fld, "index.html"), 'w') as f:
        f.write(index_html)
Beispiel #4
0
def main(argv):
    args = parser.parse_args(argv[1:])
    db = libpyprjoxide.Database(database.get_db_root())
    docs_root = path.join(database.get_oxide_root(), "docs")
    libpyprjoxide.write_tilebits_html(db, docs_root, args.family, args.device,
                                      args.tiletype, args.outdir)