Beispiel #1
0
def test_get_scripts():
    flag_combos = [{'target' : 'sim'  , 'is_toplevel' : False},
                   {'target' : 'sim'  , 'is_toplevel' : True},
                   {'target' : 'synth', 'is_toplevel' : False},
                   {'target' : 'synth', 'is_toplevel' : True},
    ]
    filename = os.path.join(os.path.dirname(__file__), 'cores', 'misc', 'scriptscore.core')
    core = Core(filename)

    for flags in flag_combos:
        env = {
            'FILES_ROOT' : 'dummyroot'
        }
        result = core.get_scripts("dummyroot", flags)
        expected = {}
        if flags['target'] == 'sim':
            sections = ['post_run', 'pre_build', 'pre_run']
        else:
            if flags['is_toplevel']:
                env['SYSTEM_ROOT'] = core.files_root
                sections = ['pre_build', 'post_build']
            else:
                sections = []
        for section in sections:
            _name = flags['target']+section+'_scripts{}'
            expected[section] = [{'cmd' : ['sh', os.path.join('dummyroot', _name.format(i))],
                                  'name' : _name.format(i),
                                  'env' : env} for i in range(2)]
        assert expected == result
Beispiel #2
0
def test_capi2_get_depends():
    from fusesoc.core import Core
    from fusesoc.vlnv import Vlnv

    core = Core(os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "depends.core"))
    flags = {}
    result = core.get_depends(flags)

    expected = [
        Vlnv('unversioned'),
        Vlnv('versioned-1.0'),
        Vlnv('<lt-1.0'),
        Vlnv('<=lte-1.0'),
        Vlnv('=eq-1.0'),
        Vlnv('>gt-1.0'),
        Vlnv('>=gte-1.0'),
        Vlnv('::n'),
        Vlnv('::nv:1.0'),
        Vlnv(':l:nv:1.0'),
        Vlnv('v:l:nv:1.0'),
        Vlnv('<::vlnvlt:1.0'),
        Vlnv('<=::vlnvlte:1.0'),
        Vlnv('=::vlnveq:1.0'),
        Vlnv('>::vlnvgt:1.0'),
        Vlnv('>=::vlnvgte:1.0'),
    ]
    assert len(result) == len(expected)
    for i in range(len(result)):
        assert result[i] == expected[i]
Beispiel #3
0
def test_capi2_get_depends():
    from fusesoc.core import Core
    from fusesoc.vlnv import Vlnv

    core = Core(os.path.join(tests_dir, "capi2_cores", "misc", "depends.core"))
    flags = {}
    result = core.get_depends(flags)

    expected = [
        Vlnv('unversioned'),
        Vlnv('versioned-1.0'),
        Vlnv('<lt-1.0'),
        Vlnv('<=lte-1.0'),
        Vlnv('=eq-1.0'),
        Vlnv('>gt-1.0'),
        Vlnv('>=gte-1.0'),
        Vlnv('::n'),
        Vlnv('::nv:1.0'),
        Vlnv(':l:nv:1.0'),
        Vlnv('v:l:nv:1.0'),
        Vlnv('<::vlnvlt:1.0'),
        Vlnv('<=::vlnvlte:1.0'),
        Vlnv('=::vlnveq:1.0'),
        Vlnv('>::vlnvgt:1.0'),
        Vlnv('>=::vlnvgte:1.0'),
    ]
    assert len(result) == len(expected)
    for i in range(len(result)):
        assert result[i] == expected[i]
Beispiel #4
0
def test_capi2_get_generators():
    from fusesoc.core import Core

    core = Core(os.path.join(cores_dir, "generators.core"))

    generators = core.get_generators({})
    assert len(generators) == 1
    assert generators['generator1'].command == 'testgen.py'
Beispiel #5
0
def test_url_provider():
    cache_root = tempfile.mkdtemp('url_')
    core = Core(os.path.join(cores_root, 'mmuart', 'mmuart.core'), cache_root)

    core.setup()

    assert (os.path.isfile(os.path.join(core.files_root,
                                        'uart_transceiver.v')))
Beispiel #6
0
def test_url_provider():
    cores_root = os.path.join(tests_dir, "capi2_cores", "providers")

    for corename in ["url_simple", "url_simple_with_user_agent", "url_tar", "url_zip"]:
        cache_root = tempfile.mkdtemp(prefix="url_")
        core = Core(os.path.join(cores_root, corename + ".core"), cache_root)
        core.setup()
        assert os.path.isfile(os.path.join(core.files_root, "file.v"))
Beispiel #7
0
def test_opencores_provider():
    cache_root = tempfile.mkdtemp("opencores_")
    core = Core(os.path.join(cores_root, "misc", "opencorescore.core"), cache_root)

    core.setup()

    assert os.path.isfile(os.path.join(core.files_root, "tap_defines.v"))
    assert os.path.isfile(os.path.join(core.files_root, "tap_top.v"))
Beispiel #8
0
def test_opencores_provider():
    cache_root = tempfile.mkdtemp('opencores_')
    core = Core(os.path.join(cores_root, 'misc', 'opencorescore.core'), cache_root)

    core.setup()

    assert(os.path.isfile(os.path.join(core.files_root, 'tap_defines.v')))
    assert(os.path.isfile(os.path.join(core.files_root, 'tap_top.v')))
Beispiel #9
0
def test_capi2_get_generators():
    from fusesoc.core import Core

    core = Core(os.path.join(cores_dir, "generators.core"))

    generators = core.get_generators({})
    assert len(generators) == 1
    assert generators['generator1'].command == 'testgen.py'
Beispiel #10
0
def test_core_info():
    tests_dir = os.path.dirname(__file__)
    cores_root = os.path.join(tests_dir, 'cores')
    for core_name in ['sockit', 'mor1kx-generic']:
        core = Core(os.path.join(cores_root, core_name, core_name+'.core'))
        gen_info = '\n'.join([x for x in core.info().split('\n') if not 'Core root' in x])
        with open(os.path.join(tests_dir, __name__, core_name+".info")) as f:
            assert f.read() == gen_info, core_name
Beispiel #11
0
def test_core_info():
    tests_dir = os.path.dirname(__file__)
    cores_root = os.path.join(tests_dir, 'cores')
    for core_name in ['sockit', 'mor1kx-generic']:
        core = Core(os.path.join(cores_root, core_name, core_name + '.core'))
        gen_info = '\n'.join(
            [x for x in core.info().split('\n') if not 'Core root' in x])
        with open(os.path.join(tests_dir, __name__, core_name + ".info")) as f:
            assert f.read() == gen_info, core_name
Beispiel #12
0
def test_core_info():
    tests_dir = os.path.dirname(__file__)
    cores_root = os.path.join(tests_dir, "cores")
    for core_name in ["sockit", "mor1kx-generic"]:
        core = Core(os.path.join(cores_root, core_name, core_name + ".core"))
        gen_info = "\n".join(
            [x for x in core.info().split("\n") if not "Core root" in x])
        with open(os.path.join(tests_dir, __name__, core_name + ".info")) as f:
            assert f.read() == gen_info, core_name
Beispiel #13
0
def test_opencores_provider():
    cache_root = tempfile.mkdtemp('opencores_')
    core = Core(os.path.join(cores_root, 'misc', 'opencorescore.core'),
                cache_root)

    core.setup()

    assert (os.path.isfile(os.path.join(core.files_root, 'tap_defines.v')))
    assert (os.path.isfile(os.path.join(core.files_root, 'tap_top.v')))
Beispiel #14
0
def test_simulator():
    #Explicit toplevel
    filename = os.path.join(os.path.dirname(__file__), __name__, "c3demo.core")
    core = Core(filename, cache_root, build_root)
    assert core.simulator['toplevel'] == 'testbench'

    #Implicit toplevel
    filename = os.path.join(os.path.dirname(__file__), __name__, "atlys.core")
    core = Core(filename, cache_root, build_root)
    assert core.simulator['toplevel'] == 'orpsoc_tb'
Beispiel #15
0
def test_simulator():
    # Explicit toplevel
    filename = os.path.join(os.path.dirname(__file__), __name__, "c3demo.core")
    core = Core(filename)
    assert core.simulator["toplevel"] == "testbench"

    # Implicit toplevel
    filename = os.path.join(os.path.dirname(__file__), __name__, "atlys.core")
    core = Core(filename)
    assert core.simulator["toplevel"] == "orpsoc_tb"
Beispiel #16
0
def test_url_provider():
    cores_root = os.path.join(tests_dir, 'capi2_cores', 'providers')

    for corename in [
            'url_simple', 'url_simple_with_user_agent', 'url_tar', 'url_zip'
    ]:
        cache_root = tempfile.mkdtemp(prefix='url_')
        core = Core(os.path.join(cores_root, corename + '.core'), cache_root)
        core.setup()
        assert (os.path.isfile(os.path.join(core.files_root, 'file.v')))
Beispiel #17
0
def test_capi2_info():
    from fusesoc.core import Core
    for core_name in ['targets']:
        core_file = os.path.join(tests_dir, "capi2_cores", "misc",
                                 core_name + '.core')
        core = Core(core_file, None, None)

        gen_info = '\n'.join(
            [x for x in core.info().split('\n') if not 'Core root' in x])
        with open(os.path.join(tests_dir, __name__, core_name + ".info")) as f:
            assert f.read() == gen_info, core_name
Beispiel #18
0
def test_git_provider():
    cache_root = tempfile.mkdtemp('git_')
    core = Core(os.path.join(cores_root, 'misc', 'gitcore.core'), cache_root)

    core.setup()

    for f in [
            'LICENSE', 'README.md', 'wb_common.core', 'wb_common.v',
            'wb_common_params.v'
    ]:
        assert (os.path.isfile(os.path.join(core.files_root, f)))
Beispiel #19
0
def test_get_toplevel():
    filename = os.path.join(os.path.dirname(__file__), __name__, "atlys.core")
    core = Core(filename)
    assert 'orpsoc_tb' == core.get_toplevel()
    assert 'orpsoc_tb' == core.get_toplevel({'testbench': None})
    assert 'tb' == core.get_toplevel({'testbench': 'tb'})
    filename = os.path.join(os.path.dirname(__file__), __name__, "sockit.core")
    core = Core(filename)
    assert 'dummy_tb' == core.get_toplevel()
    assert 'dummy_tb' == core.get_toplevel({'testbench': None})
    assert 'tb' == core.get_toplevel({'testbench': 'tb'})
Beispiel #20
0
def test_url_provider():
    cores_root = os.path.join(tests_dir, 'capi2_cores', 'providers')

    for corename in ['url_simple',
                     'url_simple_with_user_agent',
                     'url_tar',
                     'url_zip']:
        cache_root = tempfile.mkdtemp(prefix='url_')
        core = Core(os.path.join(cores_root, corename+'.core'), cache_root)
        core.setup()
        assert(os.path.isfile(os.path.join(core.files_root, 'file.v')))
Beispiel #21
0
def test_capi2_info():
    from fusesoc.core import Core

    for core_name in ["targets", "generators"]:
        core_file = os.path.join(tests_dir, "capi2_cores", "misc",
                                 core_name + ".core")
        core = Core(core_file)

        gen_info = "\n".join(
            [x for x in core.info().split("\n") if not "Core root" in x])
        with open(os.path.join(tests_dir, __name__, core_name + ".info")) as f:
            assert f.read() == gen_info, core_name
Beispiel #22
0
def test_capi2_info():
    from fusesoc.core import Core
    for core_name in ['targets']:
        core_file = os.path.join(tests_dir,
                                 "capi2_cores",
                                 "misc",
                                 core_name+'.core')
        core = Core(core_file)

        gen_info = '\n'.join([x for x in core.info().split('\n') if not 'Core root' in x])
        with open(os.path.join(tests_dir, __name__, core_name+".info")) as f:
            assert f.read() == gen_info, core_name
Beispiel #23
0
def test_git_provider():
    cache_root = tempfile.mkdtemp('git_')
    core = Core(os.path.join(cores_root, 'misc', 'gitcore.core'), cache_root)
    
    core.setup()

    for f in ['LICENSE',
	      'README.md',
	      'wb_common.core',
	      'wb_common.v',
	      'wb_common_params.v']:
        assert(os.path.isfile(os.path.join(core.files_root, f)))
Beispiel #24
0
def test_core_parsing():
    from fusesoc.vlnv import Vlnv

    cores_root = os.path.join(os.path.dirname(__file__), 'cores', 'misc')
    core = Core(os.path.join(cores_root, 'nomain.core'))
    assert core.name == Vlnv("::nomain:0")

    import sys
    if sys.version_info[0] > 2:
        with pytest.raises(SyntaxError) as e:
            core = Core(os.path.join(cores_root, "duplicateoptions.core"))
        assert "option 'file_type' in section 'fileset dummy' already exists" in str(
            e.value)
Beispiel #25
0
def test_verilator():
    cores_root = os.path.join(os.path.dirname(__file__), __name__)

    core = Core(os.path.join(cores_root, "verilator_managed_systemc.core"))
    expected = {'cli_parser' : 'managed', 'libs' : [], 'mode' : 'sc'}
    assert expected == core.get_tool_options({'is_toplevel' : True, 'tool' : 'verilator'})

    assert len(core.file_sets) == 2
    compare_fileset(core.file_sets[0], 'verilator_src_files', ['file1.sc', 'file2.sc'])
    assert core.file_sets[0].file[0].file_type == 'systemCSource'
    assert core.file_sets[0].file[1].file_type == 'systemCSource'

    compare_fileset(core.file_sets[1], 'verilator_tb_toplevel', [])
Beispiel #26
0
def test_capi2_get_files():
    from fusesoc.core import Core


    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "files.core")
    core = Core(core_file)

    expected =  [
        {'is_include_file' : False,
         'file_type'       : 'vhdlSource',
         'copyto'          : '',
         'logical_name'    : 'overridden_logical_name',
         'name'            : 'vlogfile'},
        {'is_include_file' : False,
         'file_type'       : 'vhdlSource',
         'copyto'          : '',
         'logical_name'    : 'default_logical_name',
         'name'            : 'vhdlfile'},
        {'is_include_file' : False,
         'file_type'       : 'user',
         'copyto'          : 'copied.file',
         'logical_name'    : '',
         'name'            : 'subdir/dummy.extra'},
        {'is_include_file' : False,
         'file_type'       : 'tclSource',
         'copyto'          : 'subdir/another.file',
         'logical_name'    : '',
         'name'            : 'dummy.tcl'},
        {'copyto'          : '',
         'file_type'       : 'verilogSource',
         'is_include_file' : True,
         'logical_name'    : '',
         'name'            : 'vlogfile'},
        {'copyto'          : '',
         'file_type'       : 'vhdlSource',
         'is_include_file' : False,
         'logical_name'    : '',
         'name'            : 'vhdlfile'},
        {'copyto'          : '',
         'file_type'       : 'user',
         'is_include_file' : False,
         'logical_name'    : '',
         'name'            : 'pickthisfile'},
        ]

    flags = {'tool' : 'icarus'}
    result = [vars(x) for x in core.get_files(flags)]
    assert expected == result
Beispiel #27
0
def test_git_provider():
    cache_root = tempfile.mkdtemp("git_")
    core = Core(os.path.join(cores_root, "misc", "gitcore.core"), cache_root)

    core.setup()

    for f in [
            "LICENSE",
            "README.md",
            "wb_common.core",
            "wb_common.v",
            "wb_common_params.v",
    ]:
        assert os.path.isfile(os.path.join(core.files_root, f))
Beispiel #28
0
def test_capi2_get_tool():
    from fusesoc.core import Core

    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "tools.core")
    core = Core(core_file)

    assert None        == core.get_tool({'tool'   : None})
    assert 'verilator' == core.get_tool({'tool'   : 'verilator'})
    assert 'icarus'    == core.get_tool({'target' : 'with_tool'})
    assert 'verilator' == core.get_tool({'target' : 'with_tool',
                                         'tool'   : 'verilator'})
Beispiel #29
0
def test_capi2_get_tool():
    from fusesoc.core import Core

    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "tools.core")
    core = Core(core_file)

    assert None        == core.get_tool({'tool'   : None})
    assert 'verilator' == core.get_tool({'tool'   : 'verilator'})
    assert 'icarus'    == core.get_tool({'target' : 'with_tool'})
    assert 'verilator' == core.get_tool({'target' : 'with_tool',
                                         'tool'   : 'verilator'})
Beispiel #30
0
def test_capi2_get_tool_options():
    from fusesoc.core import Core

    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "targets.core")
    core = Core(core_file)

    with pytest.raises(KeyError):
        core.get_tool_options({})

    assert {} == core.get_tool_options({'tool' : 'icarus'})
    flags = {'target'      : 'target_with_tool_options',
             'is_toplevel' : True}

    flags['tool'] = 'icarus'
    expected = {'iverilog_options' : ['a', 'few', 'options']}
    assert expected == core.get_tool_options(flags)

    flags['tool'] = 'vivado'
    expected = {'part' : 'xc7a35tcsg324-1'}
    assert expected == core.get_tool_options(flags)

    flags['tool'] = 'invalid'
    expected = {}
    assert expected == core.get_tool_options(flags)
Beispiel #31
0
def test_logicore_provider():

    cache_root = tempfile.mkdtemp('logicore_')
    core = Core(os.path.join(cores_root, 'misc', 'logicorecore.core'), cache_root)

    os.environ['PATH'] = os.path.join(tests_dir, 'mock_commands')+':'+os.environ['PATH']
    core.setup()

    for f in ['dummy.tcl',
	      'dummy.xci',
	      os.path.join('subdir', 'dummy.extra')]:
        assert(os.path.isfile(os.path.join(core.files_root, f)))

    with open(os.path.join(core.files_root, 'vivado.cmd')) as f:
        assert(f.read() == '-mode batch -source dummy.tcl\n')
Beispiel #32
0
def test_coregen_provider():

    cache_root = tempfile.mkdtemp("coregen_")
    core = Core(os.path.join(cores_root, "misc", "coregencore.core"),
                cache_root)

    os.environ["PATH"] = (os.path.join(tests_dir, "mock_commands") + ":" +
                          os.environ["PATH"])
    core.setup()

    for f in ["dummy.cgp", "dummy.xco", os.path.join("subdir", "dummy.extra")]:
        assert os.path.isfile(os.path.join(core.files_root, f))

    with open(os.path.join(core.files_root, "run.cmd")) as f:
        assert f.read() == "-r -b dummy.xco -p dummy.cgp\n"
Beispiel #33
0
def test_logicore_provider():

    cache_root = tempfile.mkdtemp("logicore_")
    core = Core(os.path.join(cores_root, "misc", "logicorecore.core"),
                cache_root)

    os.environ["PATH"] = (os.path.join(tests_dir, "mock_commands") + ":" +
                          os.environ["PATH"])
    core.setup()

    for f in ["dummy.tcl", "dummy.xci", os.path.join("subdir", "dummy.extra")]:
        assert os.path.isfile(os.path.join(core.files_root, f))

    with open(os.path.join(core.files_root, "vivado.cmd")) as f:
        assert f.read() == "-mode batch -source dummy.tcl\n"
Beispiel #34
0
def test_coregen_provider():

    cache_root = tempfile.mkdtemp('coregen_')
    core = Core(os.path.join(cores_root, 'misc', 'coregencore.core'), cache_root)

    os.environ['PATH'] = os.path.join(tests_dir, 'mock_commands')+':'+os.environ['PATH']
    core.setup()

    for f in ['dummy.cgp',
	      'dummy.xco',
	      os.path.join('subdir', 'dummy.extra')]:
        assert(os.path.isfile(os.path.join(core.files_root, f)))

    with open(os.path.join(core.files_root, 'run.cmd')) as f:
        assert(f.read() == '-r -b dummy.xco -p dummy.cgp\n')
Beispiel #35
0
def test_logicore_provider():

    cache_root = tempfile.mkdtemp('logicore_')
    core = Core(os.path.join(cores_root, 'misc', 'logicorecore.core'),
                cache_root)

    os.environ['PATH'] = os.path.join(
        tests_dir, 'mock_commands') + ':' + os.environ['PATH']
    core.setup()

    for f in ['dummy.tcl', 'dummy.xci', os.path.join('subdir', 'dummy.extra')]:
        assert (os.path.isfile(os.path.join(core.files_root, f)))

    with open(os.path.join(core.files_root, 'vivado.cmd')) as f:
        assert (f.read() == '-mode batch -source dummy.tcl\n')
Beispiel #36
0
def test_coregen_provider():

    cache_root = tempfile.mkdtemp('coregen_')
    core = Core(os.path.join(cores_root, 'misc', 'coregencore.core'),
                cache_root)

    os.environ['PATH'] = os.path.join(
        tests_dir, 'mock_commands') + ':' + os.environ['PATH']
    core.setup()

    for f in ['dummy.cgp', 'dummy.xco', os.path.join('subdir', 'dummy.extra')]:
        assert (os.path.isfile(os.path.join(core.files_root, f)))

    with open(os.path.join(core.files_root, 'run.cmd')) as f:
        assert (f.read() == '-r -b dummy.xco -p dummy.cgp\n')
Beispiel #37
0
def test_get_tool():
    cores_root = os.path.join(os.path.dirname(__file__), 'cores')

    core = Core(os.path.join(cores_root, 'atlys', 'atlys.core'))
    assert None     == core.get_tool({'target' : 'sim', 'tool' : None})
    assert 'icarus' == core.get_tool({'target' : 'sim', 'tool' : 'icarus'})
    assert 'ise'    == core.get_tool({'target' : 'synth', 'tool' : None})
    assert 'vivado' == core.get_tool({'target' : 'synth', 'tool' : 'vivado'})

    core = Core(os.path.join(cores_root, 'sockit', 'sockit.core'))
    assert 'icarus' == core.get_tool({'target' : 'sim', 'tool' : None})
    assert 'icarus' == core.get_tool({'target' : 'sim', 'tool' : 'icarus'})
    del core.main.backend
    assert None     == core.get_tool({'target' : 'synth', 'tool' : None})
    assert 'vivado' == core.get_tool({'target' : 'synth', 'tool' : 'vivado'})
    core.main.backend = 'quartus'
Beispiel #38
0
def test_quartus():
    filename = os.path.join(os.path.dirname(__file__), __name__, "sockit.core")
    core = Core(filename)

    #Check filesets
    assert len(core.file_sets) == 4
    assert core.file_sets[0].name == 'verilog_src_files'
    assert core.file_sets[1].name == 'verilog_tb_src_files'
    assert core.file_sets[2].name == 'verilog_tb_private_src_files'

    #Check that backend files are converted to fileset properly
    assert len(core.file_sets[3].file) == 3
    compare_fileset(core.file_sets[3], 'backend_files',
                    ['data/sockit.qsys', 'data/sockit.sdc', 'data/pinmap.tcl'])
    assert core.file_sets[3].file[0].file_type == 'QSYS'
    assert core.file_sets[3].file[1].file_type == 'SDC'
    assert core.file_sets[3].file[2].file_type == 'tclSource'

    #Check backend section
    assert core.quartus.quartus_options == '--64bit'
    assert core.quartus.family == '"Cyclone V"'
    assert core.quartus.device == '5CSXFC6D6F31C8ES'
    assert core.quartus.top_module == 'orpsoc_top'

    assert core.quartus.warnings == []
Beispiel #39
0
def test_quartus():
    filename = os.path.join(os.path.dirname(__file__), __name__, "sockit.core")
    core = Core(filename)

    # Check filesets
    assert len(core.file_sets) == 4
    assert core.file_sets[0].name == "verilog_src_files"
    assert core.file_sets[1].name == "verilog_tb_src_files"
    assert core.file_sets[2].name == "verilog_tb_private_src_files"

    # Check that backend files are converted to fileset properly
    assert len(core.file_sets[3].file) == 3
    compare_fileset(
        core.file_sets[3],
        "backend_files",
        ["data/sockit.qsys", "data/sockit.sdc", "data/pinmap.tcl"],
    )
    assert core.file_sets[3].file[0].file_type == "QSYS"
    assert core.file_sets[3].file[1].file_type == "SDC"
    assert core.file_sets[3].file[2].file_type == "tclSource"

    # Check backend section
    assert core.quartus.quartus_options == "--64bit"
    assert core.quartus.family == '"Cyclone V"'
    assert core.quartus.device == "5CSXFC6D6F31C8ES"
    assert core.quartus.top_module == "orpsoc_top"

    assert core.quartus.warnings == []
Beispiel #40
0
def test_export():
    import os
    import tempfile

    from fusesoc.edalizer import Edalizer
    from fusesoc.core import Core

    core = Core(
        os.path.join(os.path.dirname(__file__), 'cores', 'wb_intercon',
                     'wb_intercon-1.0.core'))

    build_root = tempfile.mkdtemp(prefix='export_')
    export_root = os.path.join(build_root, 'exported_files')
    eda_api = Edalizer(core.name, {
        'tool': 'icarus'
    }, [core],
                       cache_root=None,
                       work_root=os.path.join(build_root, 'work'),
                       export_root=export_root).edalize

    for f in [
            'wb_intercon_1.0/dummy_icarus.v',
            'wb_intercon_1.0/bench/wb_mux_tb.v',
            'wb_intercon_1.0/bench/wb_upsizer_tb.v',
            'wb_intercon_1.0/bench/wb_intercon_tb.v',
            'wb_intercon_1.0/bench/wb_arbiter_tb.v',
            'wb_intercon_1.0/rtl/verilog/wb_data_resize.v',
            'wb_intercon_1.0/rtl/verilog/wb_mux.v',
            'wb_intercon_1.0/rtl/verilog/wb_arbiter.v',
            'wb_intercon_1.0/rtl/verilog/wb_upsizer.v',
    ]:
        assert os.path.isfile(os.path.join(export_root, f))
Beispiel #41
0
def test_copyto():
    import os
    import tempfile

    from fusesoc.edalizer import Edalizer
    from fusesoc.core import Core

    core = Core(
        os.path.join(os.path.dirname(__file__), 'cores', 'misc',
                     'copytocore.core'))
    flags = {'tool': 'icarus'}

    work_root = tempfile.mkdtemp(prefix='copyto_')

    eda_api = Edalizer(core.name, flags, [core], None, work_root, None).edalize

    assert eda_api['files'] == [{
        'file_type': 'user',
        'core': '::copytocore:0',
        'logical_name': '',
        'name': 'copied.file',
        'is_include_file': False
    }, {
        'file_type': 'tclSource',
        'core': '::copytocore:0',
        'logical_name': '',
        'name': 'subdir/another.file',
        'is_include_file': False
    }]
    assert os.path.exists(os.path.join(work_root, 'copied.file'))
    assert os.path.exists(os.path.join(work_root, 'subdir', 'another.file'))
Beispiel #42
0
def test_github_provider():
    cache_root = tempfile.mkdtemp('github_')
    core = Core(os.path.join(cores_root, 'vlog_tb_utils', 'vlog_tb_utils-1.1.core'), cache_root)
    
    core.setup()
    
    for f in ['LICENSE',
              'vlog_functions.v',
              'vlog_tap_generator.v',
              'vlog_tb_utils.core',
              'vlog_tb_utils.v']:
        assert(os.path.isfile(os.path.join(core.files_root, f)))
        ref_dir   = os.path.join(os.path.dirname(__file__),  __name__)
        f = 'vlog_functions.v'
    with open(os.path.join(ref_dir, f)) as fref, open(os.path.join(core.files_root, f)) as fgen:
            assert fref.read() == fgen.read(), f
Beispiel #43
0
 def find_cores(self, library):
     found_cores = []
     path = os.path.expanduser(library.location)
     exclude = {".git"}
     if os.path.isdir(path) == False:
         raise OSError(path + " is not a directory")
     logger.debug("Checking for cores in " + path)
     for root, dirs, files in os.walk(path, followlinks=True):
         if "FUSESOC_IGNORE" in files:
             del dirs[:]
             continue
         dirs[:] = [directory for directory in dirs if directory not in exclude]
         for f in files:
             if f.endswith(".core"):
                 core_file = os.path.join(root, f)
                 try:
                     core = Core(core_file, self.config.cache_root)
                     found_cores.append(core)
                 except SyntaxError as e:
                     w = "Parse error. Ignoring file " + core_file + ": " + e.msg
                     logger.warning(w)
                 except ImportError as e:
                     w = 'Failed to register "{}" due to unknown provider: {}'
                     logger.warning(w.format(core_file, str(e)))
     return found_cores
Beispiel #44
0
def test_copyto():
    import os
    import tempfile

    from fusesoc.edalizer import Edalizer
    from fusesoc.core import Core

    core = Core(
        os.path.join(os.path.dirname(__file__), "cores", "misc",
                     "copytocore.core"))
    flags = {"tool": "icarus"}

    work_root = tempfile.mkdtemp(prefix="copyto_")

    eda_api = Edalizer(core.name, flags, [core], None, work_root, None).edalize

    assert eda_api["files"] == [
        {
            "file_type": "user",
            "core": "::copytocore:0",
            "logical_name": "",
            "name": "copied.file",
            "is_include_file": False,
        },
        {
            "file_type": "tclSource",
            "core": "::copytocore:0",
            "logical_name": "",
            "name": "subdir/another.file",
            "is_include_file": False,
        },
    ]
    assert os.path.exists(os.path.join(work_root, "copied.file"))
    assert os.path.exists(os.path.join(work_root, "subdir", "another.file"))
Beispiel #45
0
def test_capi2_get_tool_options():
    from fusesoc.core import Core

    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "targets.core")
    core = Core(core_file)

    with pytest.raises(KeyError):
        core.get_tool_options({})

    assert {} == core.get_tool_options({'tool' : 'icarus'})
    flags = {'target'      : 'target_with_tool_options',
             'is_toplevel' : True}

    flags['tool'] = 'icarus'
    expected = {'iverilog_options' : ['a', 'few', 'options']}
    assert expected == core.get_tool_options(flags)

    flags['tool'] = 'vivado'
    expected = {'part' : 'xc7a35tcsg324-1'}
    assert expected == core.get_tool_options(flags)

    flags['tool'] = 'invalid'
    expected = {}
    assert expected == core.get_tool_options(flags)
Beispiel #46
0
def test_capi2_get_toplevel():
    from fusesoc.core import Core

    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "toplevel.core")
    core = Core(core_file)

    flags = {'target' : 'no_toplevel'}
    with pytest.raises(SyntaxError):
        core.get_toplevel(flags)

    flags = {'target' : 'str_toplevel'}
    assert 'toplevel_as_string'  == core.get_toplevel(flags)

    flags = {'target' : 'list_toplevel'}
    assert 'toplevel as list'  == core.get_toplevel(flags)
Beispiel #47
0
def test_get_tool_options():
    cores_root = os.path.join(os.path.dirname(__file__), 'cores')

    core = Core(os.path.join(cores_root, 'mor1kx-generic', 'mor1kx-generic.core'))
    assert {'iverilog_options' : ['-DSIM']} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'icarus'})
    assert {} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'modelsim'})
    assert {'fuse_options' : ['some','isim','options']} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'isim'})
    expected = {'xelab_options' : ['--timescale 1ps/1ps', '--debug typical',
                                   'dummy', 'options', 'for', 'xelab']}
    assert expected == core.get_tool_options({'is_toplevel' : True, 'tool' : 'xsim'})
    assert {} == core.get_tool_options({'is_toplevel' : False, 'tool' : 'icarus'})

    core = Core(os.path.join(cores_root, 'elf-loader', 'elf-loader.core'))
    assert {'libs' : ['-lelf']} == core.get_tool_options({'is_toplevel' : False, 'tool' : 'verilator'})
    assert {} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'invalid'})
Beispiel #48
0
def test_capi2_get_files():
    from fusesoc.core import Core


    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "files.core")
    core = Core(core_file)

    expected =  [
        {'is_include_file' : False,
         'file_type'       : 'user',
         'copyto'          : 'copied.file',
         'logical_name'    : '',
         'name'            : 'subdir/dummy.extra'},
        {'is_include_file' : False,
         'file_type'       : 'tclSource',
         'copyto'          : 'subdir/another.file',
         'logical_name'    : '',
         'name'            : 'dummy.tcl'},
        {'copyto'          : '',
         'file_type'       : 'verilogSource',
         'is_include_file' : True,
         'logical_name'    : '',
         'name'            : 'vlogfile'},
        {'copyto'          : '',
         'file_type'       : 'vhdlSource',
         'is_include_file' : False,
         'logical_name'    : '',
         'name'            : 'vhdlfile'},
        {'copyto'          : '',
         'file_type'       : 'user',
         'is_include_file' : False,
         'logical_name'    : '',
         'name'            : 'pickthisfile'},
        ]

    flags = {'tool' : 'icarus'}
    result = [vars(x) for x in core.get_files(flags)]
    assert expected == result
Beispiel #49
0
def test_capi2_get_ttptttg():
    from fusesoc.core import Core

    core = Core(os.path.join(cores_dir, "generate.core"))

    flags = {'is_toplevel' : True}
    expected = [
        {'name'      : 'testgenerate_without_params',
         'generator' : 'generator1',
         'pos'        : 'append',
         'config'    : {}},
        {'name'      : 'testgenerate_with_params',
         'generator' : 'generator1',
         'pos'       : 'append',
         'config'    : {'param1' : 'a param',
                        'param2' : ['list', 'of', 'stuff']}},
    ]
    assert expected == core.get_ttptttg(flags)

    flags['target'] = 'nogenerate'
    assert [] == core.get_ttptttg(flags)

    flags['target'] = 'invalid_generate'
    with pytest.raises(SyntaxError) as excinfo:
        core.get_ttptttg(flags)
    assert "Generator instance 'idontexist', requested by target 'invalid_generate', was not found" in str(excinfo.value)

    flags['target'] = 'invalid_target'
    assert [] == core.get_ttptttg(flags)
Beispiel #50
0
def test_capi2_get_vpi():
    from fusesoc.core import Core

    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "vpi.core")
    core = Core(core_file)

    expected = [
        {'src_files': ['f1',
                       'f3'],
         'include_dirs': [''],
         'libs': ['some_lib'],
         'name': 'vpi1'},
        {'src_files': ['f4'],
         'include_dirs': [],
         'libs': [],
         'name': 'vpi2'}
    ]

    assert [] == core.get_vpi({'is_toplevel' : True, 'target' : 'invalid'})
    assert expected == core.get_vpi({'is_toplevel' : True})
    assert expected == core.get_vpi({'is_toplevel' : False})
Beispiel #51
0
def test_get_toplevel():
    filename = os.path.join(os.path.dirname(__file__),
                            __name__,
                            "atlys.core")
    core = Core(filename)
    assert 'orpsoc_tb'  == core.get_toplevel({'tool' : 'icarus'})
    assert 'orpsoc_tb'  == core.get_toplevel({'tool' : 'icarus', 'testbench' : None})
    assert 'tb'         == core.get_toplevel({'tool' : 'icarus', 'testbench' : 'tb'})
    assert 'orpsoc_top' == core.get_toplevel({'tool' : 'vivado'})
    filename = os.path.join(os.path.dirname(__file__),
                            __name__,
                            "sockit.core")
    core = Core(filename)
    assert 'dummy_tb'   == core.get_toplevel({'tool' : 'icarus'})
    assert 'dummy_tb'   == core.get_toplevel({'tool' : 'icarus', 'testbench' : None})
    assert 'tb'         == core.get_toplevel({'tool' : 'icarus', 'testbench' : 'tb'})
    assert 'orpsoc_top' == core.get_toplevel({'tool' : 'vivado'})
Beispiel #52
0
def test_capi2_get_work_root():
    from fusesoc.core import Core

    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "targets.core")
    core = Core(core_file)

    with pytest.raises(SyntaxError):
        core.get_work_root({})
    assert 'default-icarus'      == core.get_work_root({'tool' : 'icarus'})
    assert 'default-vivado'      == core.get_work_root({'tool' : 'vivado'})
    assert 'default-icarus'      == core.get_work_root({'tool' : 'icarus',
                                                        'target' : None})
    with pytest.raises(SyntaxError):
        core.get_work_root({'tool' : 'icarus', 'target' : 'invalid_target'})
    assert 'empty_target-icarus' == core.get_work_root({'tool' : 'icarus', 'target' : 'empty_target'})
Beispiel #53
0
def test_capi2_export():
    import os
    import tempfile
    from fusesoc.core import Core

    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "files.core")
    core = Core(core_file)

    export_root  = tempfile.mkdtemp(prefix='capi2_export_')

    core.export(export_root)

    expected = [
        'dontpickthisfile',
        'dummy.tcl',
        'scriptfile',
        'subdir/dummy.extra',
        'vhdlfile',
        'vlogfile',
        'vpifile']
    result = []

    for root, dirs, files in os.walk(export_root):
        result += [os.path.relpath(os.path.join(root, f), export_root) for f in files]

    assert expected == sorted(result)

    with pytest.raises(RuntimeError) as excinfo:
        core.export(export_root, {'target' : 'will_fail', 'is_toplevel' : True})
    assert "Cannot find idontexist in" in str(excinfo.value)

    core.files_root = os.path.join(tests_dir, __name__)
    core.export(export_root, {'target' : 'files_root_test', 'is_toplevel' : True})
    expected = ['targets.info']

    result = []

    for root, dirs, files in os.walk(export_root):
        result += [os.path.relpath(os.path.join(root, f), export_root) for f in files]
    assert expected == sorted(result)
Beispiel #54
0
def test_cachable():
    cache_root = tempfile.mkdtemp('opencores_')
    core = Core(os.path.join(cores_root, 'misc', 'opencorescore.core'), cache_root)
    assert(core.cache_status() == 'empty')
    core.setup()
    assert(core.cache_status() == 'downloaded')
Beispiel #55
0
def test_capi2_get_parameters():
    from fusesoc.core import Core
    from fusesoc.capi2.core import Generators

    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "parameters.core")
    core = Core(core_file)

    param1 = {
        'datatype'  : 'str',
        'paramtype' : 'vlogparam',
    }
    param2 = {
        'datatype'    : 'str',
        'default'     : 'default_value',
        'description' : 'This is a parameter',
        'paramtype'   : 'vlogparam',
        }
    intparam = {
        'datatype'  : 'int',
        'default'   : 5446,
        'paramtype' : 'vlogparam',
    }
    boolfalse = {
        'datatype'  : 'bool',
        'default'   : False,
        'paramtype' : 'vlogparam',
    }

    booltrue = {
        'datatype'  : 'bool',
        'default'   : True,
        'paramtype' : 'vlogparam',
    }
    int0 = {
        'datatype'  : 'int',
        'default'   : 0,
        'paramtype' : 'vlogparam',
    }
    emptystr = {
        'datatype'  : 'str',
        'paramtype' : 'vlogparam',
    }

    flags    = {'is_toplevel' : True}
    expected = {'param1' : param1}

    assert expected == core.get_parameters(flags)

    flags['target'] = 'noparameters'
    expected = {}
    assert expected == core.get_parameters(flags)

    flags['target'] = 'nonexistant'
    with pytest.raises(SyntaxError) as excinfo:
        core.get_parameters(flags)
    assert "Parameter 'idontexist', requested by target 'nonexistant', was not found" in str(excinfo.value)

    flags['target'] = 'multiparameters'
    expected = {'param1' : param1, 'param2' : param2}
    assert expected == core.get_parameters(flags)

    flags['target'] = 'use_flags'
    expected = {'param2' : param2,
                'condparamtype' : {'datatype'  : 'str',
                                   'paramtype' : 'vlogparam'}
    }

    assert expected == core.get_parameters(flags)

    flags['tool'] = 'icarus'
    expected = {'param1' : param1,
                'condparamtype' : {'datatype'  : 'str',
                                   'paramtype' : 'plusarg'}
    }
    assert expected == core.get_parameters(flags)

    flags['target'] = 'types'
    expected = {'param2'    : param2,
                'intparam'  : intparam,
                'boolfalse' : boolfalse,
                'booltrue'  : booltrue,
    }
    result = core.get_parameters(flags)
    assert expected == result
    assert str == type(result['param2']['datatype'])
    assert str == type(result['param2']['default'])
    assert str == type(result['param2']['description'])
    assert str == type(result['param2']['paramtype'])
    assert int == type(result['intparam']['default'])
    assert bool == type(result['boolfalse']['default'])
    assert bool == type(result['booltrue']['default'])

    flags['target'] = 'empty'
    expected = {'int0' : int0,
                'emptystr' : emptystr}

    assert expected == core.get_parameters(flags)

    flags['target'] = 'override'
    param1['default'] = 'def'
    param2['default'] = 'new_def'
    intparam['default'] = 0xdeadbeef
    boolfalse['default'] = True
    booltrue['default'] = False
    expected = {'param1'    : param1,
                'param2'    : param2,
                'intparam'  : intparam,
                'boolfalse' : boolfalse,
                'booltrue'  : booltrue,
    }
    assert expected == core.get_parameters(flags)
Beispiel #56
0
def test_uncachable():
    cores_root = os.path.join(tests_dir, 'capi2_cores', 'misc')
    cache_root = tempfile.mkdtemp('uncachable_')
    core       = Core(os.path.join(cores_root, 'uncachable.core'), cache_root)
    assert(core.cache_status() == 'outofdate')
Beispiel #57
0
def test_capi2_get_scripts():
    from fusesoc.core import Core

    simple1  = {'cmd' : ['simple_cmd1'],
                'env' : {'FILES_ROOT' : 'my_files_root'},
                'name' : 'simple1'}
    simple2  = {'cmd'  : ['simple_cmd2'],
                'env' : {'FILES_ROOT' : 'my_files_root'},
                'name' : 'simple2'}
    simple3  = {'cmd'  : ['simple_cmd3'],
                'env' : {'FILES_ROOT' : 'my_files_root'},
                'name' : 'simple3'}
    simple4  = {'cmd'  : ['simple_cmd4'],
                'env' : {'FILES_ROOT' : 'my_files_root'},
                'name' : 'simple4'}
    with_env = {'cmd'  : ['simple5'],
                'env'  : {'FILES_ROOT' : 'my_files_root',
                          'TESTENV' : 'testvalue'},
                'name' : 'with_env'}
    multi_cmd = {'cmd'  : ['command', 'with', 'args'],
                 'env' : {'FILES_ROOT' : 'my_files_root'},
                 'name' : 'multi_cmd'}
    core_file = os.path.join(tests_dir,
                             "capi2_cores",
                             "misc",
                             "hooks.core")
    core = Core(core_file)

    flags    = {'is_toplevel' : True}
    expected = {'pre_build' : [simple1]}
    assert expected == core.get_scripts("my_files_root", flags)

    flags['target'] = 'nohooks'
    expected = {}
    assert expected == core.get_scripts("my_files_root", flags)

    flags['target'] = 'nonexistant'
    with pytest.raises(SyntaxError) as excinfo:
        core.get_scripts("", flags)
    assert "Script 'idontexist', requested by target 'nonexistant', was not found" in str(excinfo.value)

    flags['target'] = 'allhooks'
    expected = {
        'pre_build'  : [simple1],
        'post_build' : [simple2],
        'pre_run'    : [simple3],
        'post_run'   : [simple4],
        }
    assert expected == core.get_scripts("my_files_root", flags)

    flags['target'] = 'multihooks'
    expected = {
        'pre_run'  : [simple1,
                      with_env,
                      multi_cmd]
        }
    assert expected == core.get_scripts("my_files_root", flags)

    flags['target'] = 'use_flags'
    expected = {'post_run' : [simple2]}
    assert expected == core.get_scripts("my_files_root", flags)

    flags['tool'] = 'icarus'
    expected = {'post_run' : [simple1]}
    assert expected == core.get_scripts("my_files_root", flags)