Ejemplo n.º 1
0
    def cmd_entry(**kwds):
        if kwds['design'] is None:
            kwds['design'] = inspect.stack()[0][1]
        else:
            runpy.run_path(kwds['design'])

        kwds['design'] = os.path.abspath(os.path.expanduser(kwds['design']))

        load_rc('.pygears', os.path.dirname(kwds['design']))

        f(**kwds)
Ejemplo n.º 2
0
def main_loop(script_fn, argv, layers=Inject('gearbox/layers')):
    import faulthandler
    faulthandler.enable(file=open('err.log', 'w'))

    reg['gearbox/main/new_model_script_fn'] = None
    # bind('gearbox/main/argv', sys_args)

    sys_args = argv.copy()
    load_rc('.gearbox', os.getcwd())

    # app = QtWidgets.QApplication(sys.argv)
    app = Application(sys_args)
    with open(os.path.join(os.path.dirname(__file__), 'default.css')) as f:
        stylesheet = f.read()

    app.setStyleSheet(themify(stylesheet))

    app.setWindowIcon(QtGui.QIcon('gearbox.png'))
    app.setFont(QtGui.QFont("DejaVu Sans Mono", 10))

    main_window = MainWindow()
    main_window.setWindowTitle(f'Gearbox')

    sim_bridge_inst = sim_bridge()
    sim_bridge_inst.script_loading_started.connect(set_main_win_title)
    sim_bridge_inst.script_loading_started.connect(load)

    for l in layers:
        l()

    if script_fn:
        load_rc('.pygears', os.path.dirname(script_fn))
        sim_bridge_inst.invoke_method('run_model', script_fn=script_fn)

    main_window.show()
    ret = app.exec_()
    script_fn = reg['gearbox/main/new_model_script_fn']
    if script_fn:
        print('Quitting: ', sys_args)
        print(('gearbox', sys_args[0], script_fn))
        cmd = [sys_args[0], 'gearbox']
        for i in range(2, len(sys_args)):
            if sys_args[i] in ['-d', '--outdir']:
                cmd.append(sys_args[i])
                cmd.append(sys_args[i + 1])

        cmd.append(script_fn)
        os.execl(*cmd)
    else:
        sys.exit(ret)
Ejemplo n.º 3
0
def resdir(tmp_path_factory, pytestconfig):
    if not pytestconfig.getoption('--pg'):
        return None

    from pygears import clear, reg
    from pygears.conf.custom_settings import load_rc
    clear()
    load_rc('.pygears', pytestconfig.rootdir)

    resdir = pytestconfig.getoption("--pg-resdir")

    if resdir is None:
        resdir = str(tmp_path_factory.getbasetemp())

    from pygears import reg
    reg['results-dir'] = resdir

    return resdir
Ejemplo n.º 4
0
def synth(top,
          design=None,
          outdir=None,
          include=None,
          lang='sv',
          generate=True,
          build=True,
          util=False,
          timing=False,
          part='xc7z020clg484-1',
          prjdir=None):

    if reg['vivado/synth/lock']:
        return

    if design is None:
        design = get_main_script()

    if design is not None:
        design = os.path.abspath(os.path.expanduser(design))

    if isinstance(top, str):
        top_mod = find(top)
    else:
        top_mod = top

    if outdir is None:
        outdir = os.path.join(reg['vivado/iplib'], top.basename)

    os.makedirs(outdir, exist_ok=True)

    # makefile(
    #     top,
    #     design,
    #     outdir,
    #     lang=lang,
    #     generate=generate,
    #     build=build,
    #     include=include,
    #     prjdir=prjdir)

    if not generate:
        return

    if top_mod is None:
        reg['vivado/synth/lock'] = True
        load_rc('.pygears', os.path.dirname(design))
        runpy.run_path(design)
        reg['vivado/synth/lock'] = False
        top_mod = find(top)

    if top_mod is None:
        raise Exception(
            f'Module "{top}" specified as a IP core top level module, not found in the design "{design}"'
        )

    if prjdir is None:
        prjdir = tempfile.mkdtemp()

    if include is None:
        include = []

    include += reg[f'{lang}gen/include']

    generate_synth(top_mod, outdir, lang, util, timing, prjdir, part)

    if build:
        ret = run(os.path.join(outdir, 'synth.tcl'))
        if ret != 0:
            raise Exception('Vivado build error')

    report = {}
    if util:
        report['util'] = parse_utilization(f'{prjdir}/utilization.txt')

    if timing:
        report['path_delay'] = parse_timing(f'{prjdir}/timing.txt')

    return report
Ejemplo n.º 5
0
from pygears.sim import sim

import pygears.lib
import pygears.typing.pprint

# import os
# from pygears.registry import load_plugin_folder
# load_plugin_folder(os.path.join(os.path.dirname(__file__), 'lib'))

import pygears.hdl

non_plugin_pkgs = ['pygears_live', 'pygears_tools']
plugins = {
    name: importlib.import_module(name)
    for finder, name, ispkg in pkgutil.iter_modules()
    if name.startswith('pygears_') and name not in non_plugin_pkgs
}

from pygears.conf.custom_settings import load_rc, print_registry

load_rc('.pygears')
# print_registry()

sys.excepthook = pygears_excepthook

__all__ = [
    'TraceLevel', 'reg', 'gear', 'alternative', 'clear', 'Intf', 'PluginBase',
    'find', 'MultiAlternativeError', 'GearDone', 'IntfEmpty', 'module',
    'TypeMatchError', 'datagear'
]
Ejemplo n.º 6
0
def ipgen(
    top,
    design,
    outdir=None,
    include=None,
    lang='sv',
    generate=True,
    build=True,
    intf=None,
    prjdir=None,
    presynth=False,
    rst=True,
):

    if reg['vivado/ipgen/lock']:
        return

    if design is None:
        design = get_main_script()

    design = os.path.abspath(os.path.expanduser(design))

    if outdir is None:
        outdir = os.path.join(reg['vivado/iplib'],
                              top if isinstance(top, str) else top.basename)

    os.makedirs(outdir, exist_ok=True)

    makefile(top,
             design,
             outdir,
             lang=lang,
             generate=generate,
             build=build,
             include=include,
             intf=intf,
             prjdir=prjdir)

    if not generate:
        return

    if isinstance(top, str):
        top_mod = find(top)
    else:
        top_mod = top

    if top_mod is None:
        reg['vivado/ipgen/lock'] = True
        load_rc('.pygears', os.path.dirname(design))
        runpy.run_path(design)
        reg['vivado/ipgen/lock'] = False
        top_mod = find(top)

    if top_mod is None:
        raise Exception(
            f'Module "{top}" specified as a IP core top level module, not found in the design "{design}"'
        )

    if prjdir is None:
        prjdir = tempfile.mkdtemp()

    if include is None:
        include = []

    include += reg[f'{lang}gen/include']

    if isinstance(intf, str):
        intf = json.loads(intf)

    if not intf:
        intf = {}
        for p in top_mod.in_ports + top_mod.out_ports:
            intf[p.basename] = 'axis'

    intfdef = get_axi_conf(top_mod, intf)
    generate_ip(top_mod,
                outdir,
                lang,
                intfdef,
                prjdir,
                presynth=presynth,
                rst=rst)

    if build:
        ret = run(os.path.join(outdir, 'script', 'ippack.tcl'))
        if ret != 0:
            raise Exception('Vivado build error')