Beispiel #1
0
def test_get_tool_options():
    core = get_core("mor1kx-generic")
    assert {'iverilog_options' : ['-DSIM']} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'icarus'})
    assert {} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'modelsim'})
    assert {} == core.get_tool_options({'is_toplevel' : True, 'tool' : 'isim'})
    assert {} == core.get_tool_options({'is_toplevel' : False, 'tool' : 'icarus'})
    core = get_core("elf-loader")
    assert {'libs' : ['-lelf']} == core.get_tool_options({'is_toplevel' : False, 'tool' : 'verilator'})
Beispiel #2
0
def test_get_tool():
    core = get_core("atlys")
    assert None == core.get_tool({'flow': 'sim', 'tool': None})
    assert 'icarus' == core.get_tool({'flow': 'sim', 'tool': 'icarus'})
    assert 'ise' == core.get_tool({'flow': 'synth', 'tool': None})
    assert 'vivado' == core.get_tool({'flow': 'synth', 'tool': 'vivado'})
    core = get_core("sockit")
    assert 'icarus' == core.get_tool({'flow': 'sim', 'tool': None})
    assert 'icarus' == core.get_tool({'flow': 'sim', 'tool': 'icarus'})
    del core.main.backend
    assert None == core.get_tool({'flow': 'synth', 'tool': None})
    assert 'vivado' == core.get_tool({'flow': 'synth', 'tool': 'vivado'})
    core.main.backend = 'quartus'
Beispiel #3
0
def test_copyto():
    tests_dir = os.path.dirname(__file__)
    core      = get_core("copytocore")
    flags = {'tool' : 'icarus'}
    
    export_root = None
    work_root   = os.path.join(tests_dir,
                               'build',
                               core.name.sanitized_name,
                               core.get_work_root(flags))
    if os.path.exists(work_root):
        for f in os.listdir(work_root):
            if os.path.isdir(os.path.join(work_root, f)):
                shutil.rmtree(os.path.join(work_root, f))
            else:
                os.remove(os.path.join(work_root, f))
    else:
        os.makedirs(work_root)

    eda_api = CoreManager(Config()).setup(core.name, flags, work_root, None)

    assert eda_api['files'] == [{'file_type': 'user',
                                 'logical_name': '',
                                 'name': 'copied.file',
                                 'is_include_file': False},
                                {'file_type': 'tclSource',
                                 '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 #4
0
def test_run_scripts():
    core = get_core("no_exe_script")
    backend = get_sim('icarus', core)
    backend.configure([])
    with pytest.raises(RuntimeError):
        os.environ['PATH'] = os.path.join(
            tests_dir, 'mock_commands') + ':' + os.environ['PATH']
        backend.build()

    core = get_core("exit_1_script")
    backend = get_sim('icarus', core)
    backend.configure([])
    with pytest.raises(RuntimeError):
        os.environ['PATH'] = os.path.join(
            tests_dir, 'mock_commands') + ':' + os.environ['PATH']
        backend.build()
Beispiel #5
0
def test_export():
    import os
    import tempfile
    from test_common import common_cm, get_core

    tests_dir = os.path.dirname(__file__)
    core = get_core("wb_intercon")
    build_root = tempfile.mkdtemp(prefix='export_')
    export_root = os.path.join(build_root, core.name.sanitized_name, 'src')
    eda_api = common_cm.setup(core.name, {'tool': 'icarus'},
                              work_root=os.path.join(build_root, 'work'),
                              export_root=export_root)

    for f in [
            'verilog_utils_0/verilog_utils.vh',
            'vlog_tb_utils_1.1/vlog_tap_generator.v',
            'vlog_tb_utils_1.1/vlog_tb_utils.v',
            'vlog_tb_utils_1.1/vlog_functions.v',
            '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',
            'verilog-arbiter_0-r1/src/arbiter.v',
            'wb_common_0/wb_common_params.v', 'wb_common_0/wb_common.v'
    ]:
        assert os.path.isfile(os.path.join(export_root, f))
Beispiel #6
0
def test_core_info():
    tests_dir = os.path.dirname(__file__)

    for core_name in ['sockit', 'mor1kx-generic']:
        core = get_core(core_name)
        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 #7
0
def test_opencores_provider():
    core = get_core("opencorescore")

    if core.cache_status() is "downloaded":
        shutil.rmtree(core.files_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_url_provider():
    core = get_core("mmuart")

    if core.cache_status() is "downloaded":
        shutil.rmtree(core.files_root)
    core.setup()

    assert (os.path.isfile(os.path.join(core.files_root,
                                        'uart_transceiver.v')))
Beispiel #9
0
def test_core_info():
    tests_dir = os.path.dirname(__file__)

    core = get_core("sockit")
    gen_info = [x+'\n' for x in core.info().split('\n') if not 'Core root' in x]

    with open(os.path.join(tests_dir, __name__, "sockit.info")) as f:
        ref_info = [x for x in f.readlines() if not 'Core root' in x]
    assert '' == ''.join(difflib.unified_diff(ref_info, gen_info))
Beispiel #10
0
def test_core_parsing():
    from fusesoc.vlnv import Vlnv
    core = get_core("nomain")
    assert core.name == Vlnv("::nomain:0")

    from fusesoc.core import Core
    import sys
    if sys.version_info[0] > 2:
        with pytest.raises(SyntaxError) as e:
            core = Core("tests/cores/misc/duplicateoptions.core")
        assert "option 'file_type' in section 'fileset dummy' already exists" in str(e.value)
Beispiel #11
0
def test_git_provider():
    core = get_core("gitcore")

    if core.cache_status() is "downloaded":
        shutil.rmtree(core.files_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 #12
0
def test_github_provider():
    core = get_core("vlog_tb_utils")

    if core.cache_status() is "downloaded":
        shutil.rmtree(core.files_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)))
Beispiel #13
0
def test_get_tool_options():
    core = get_core("mor1kx-generic")
    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 = get_core("elf-loader")
    assert {
        'libs': ['-lelf']
    } == core.get_tool_options({
        'is_toplevel': False,
        'tool': 'verilator'
    })
Beispiel #14
0
def test_quartus():
    tests_dir = os.path.dirname(__file__)
    params = vlogparams + vlogdefines

    core = get_core("sockit")

    backend = _import('build', core.main.backend)(core, export=False)
    backend.configure(params)

    tcl_file = core.name.sanitized_name + '.tcl'
    ref_dir = os.path.join(tests_dir, __name__)

    assert '' == compare_file(ref_dir, backend.work_root, tcl_file)
Beispiel #15
0
def test_quartus():
    tests_dir = os.path.dirname(__file__)
    params = vlogparams + vlogdefines

    core = get_core("sockit")

    backend = get_synth('quartus', core)
    backend.configure(params)

    tcl_file = core.name.sanitized_name + '.tcl'
    ref_dir = os.path.join(tests_dir, __name__)

    assert '' == compare_file(ref_dir, backend.work_root, tcl_file)
Beispiel #16
0
def test_logicore_provider():
    core = get_core("logicorecore")

    if core.cache_status() is "downloaded":
        shutil.rmtree(core.files_root)
    tests_dir = os.path.dirname(__file__)
    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 #17
0
def test_coregen_provider():
    core = get_core("coregencore")

    if core.cache_status() is "downloaded":
        shutil.rmtree(core.files_root)
    tests_dir = os.path.dirname(__file__)
    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')]:
        print(f)
        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 #18
0
def test_ise():
    tests_dir = os.path.dirname(__file__)
    params = vlogparams + vlogdefines

    core = get_core("atlys")

    backend = get_synth('ise', core)
    backend.configure(params)

    tcl_file = core.name.sanitized_name + '.tcl'
    reference_tcl = os.path.join(tests_dir, __name__, tcl_file)
    generated_tcl = os.path.join(backend.work_root, tcl_file)

    assert os.path.exists(generated_tcl)

    with open(reference_tcl) as f1, open(generated_tcl) as f2:
        assert f1.read() == f2.read()
Beispiel #19
0
def test_github_provider():
    core = get_core("vlog_tb_utils")

    if core.cache_status() is "downloaded":
        shutil.rmtree(core.files_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 #20
0
def test_get_scripts():
    import pprint
    flag_combos = [
        {
            'target': 'sim',
            'is_toplevel': False
        },
        {
            'target': 'sim',
            'is_toplevel': True
        },
        {
            'target': 'synth',
            'is_toplevel': False
        },
        {
            'target': 'synth',
            'is_toplevel': True
        },
    ]
    core = get_core("scriptscore")

    for flags in flag_combos:
        env = {'BUILD_ROOT': os.path.join(os.path.dirname(__file__), 'build')}
        result = core.get_scripts(flags)
        expected = {}
        if flags['target'] == 'sim':
            sections = [
                'post_run_scripts', 'pre_build_scripts', 'pre_run_scripts'
            ]
        else:
            if flags['is_toplevel']:
                env['SYSTEM_ROOT'] = core.files_root
                sections = ['pre_build_scripts', 'post_build_scripts']
            else:
                sections = []
        for section in sections:
            expected[section] = [{
                flags['target'] + section + str(i): {
                    'env': env
                }
            } for i in range(2)]
        assert pprint.pformat(expected) == pprint.pformat(result)
Beispiel #21
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
        },
    ]
    core = get_core("scriptscore")

    for flags in flag_combos:
        env = {'BUILD_ROOT': os.path.join(os.path.dirname(__file__), 'build')}
        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 #22
0
def test_ise():
    tests_dir = os.path.dirname(__file__)
    params = '--vlogparam_bool --vlogparam_int=42 --vlogparam_str=hello'
    params += ' --vlogdefine_bool --vlogdefine_int=42 --vlogdefine_str=hello'

    core = get_core("atlys")

    backend = get_synth('ise', core)
    backend.configure(params.split())

    tcl_file = core.name.sanitized_name + '.tcl'
    reference_tcl = os.path.join(tests_dir, __name__, tcl_file)
    generated_tcl = os.path.join(backend.work_root, tcl_file)

    assert os.path.exists(generated_tcl)

    with open(reference_tcl) as f1, open(generated_tcl) as f2:
        diff = ''.join(difflib.unified_diff(f1.readlines(), f2.readlines()))
        assert diff == ''
Beispiel #23
0
import os
import shutil
import pytest

from test_common import get_core, get_sim

tests_dir = os.path.dirname(__file__)
core = get_core("wb_intercon")
backend = get_sim('icarus', core, export=True)
ref_dir = os.path.join(tests_dir, __name__)


def test_edatool():

    backend.configure([])
    for f in [
            'verilog_utils_0/verilog_utils.vh',
            'vlog_tb_utils_1.1/vlog_tap_generator.v',
            'vlog_tb_utils_1.1/vlog_tb_utils.v',
            'vlog_tb_utils_1.1/vlog_functions.v',
            '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',
            'verilog-arbiter_0-r1/src/arbiter.v',
            'wb_common_0/wb_common_params.v', 'wb_common_0/wb_common.v'
Beispiel #24
0
import os
import shutil
import pytest

from test_common import compare_file, get_core, get_sim, sim_params

tests_dir = os.path.dirname(__file__)
core = get_core("mor1kx-generic")
backend = get_sim('icarus', core)
ref_dir = os.path.join(tests_dir, __name__)
work_root = backend.work_root


def test_icarus_configure():

    backend.configure(sim_params)

    assert '' == compare_file(ref_dir, work_root, 'icarus.scr')


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

    backend.build()

    assert '' == compare_file(ref_dir, work_root, 'iverilog-vpi.cmd')
    assert '' == compare_file(ref_dir, work_root, 'iverilog.cmd')


def test_icarus_run():
Beispiel #25
0
import os
import pytest

from test_common import compare_files, get_core, get_sim, sim_params

tests_dir = os.path.dirname(__file__)
core = get_core("ghdltest")
backend = get_sim('ghdl', core)
ref_dir = os.path.join(tests_dir, __name__)
work_root = backend.work_root


def test_ghdl_configure():

    backend.configure(sim_params)

    compare_files(ref_dir, work_root, ['Makefile'])


def test_ghdl_build():

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

    backend.build()
    assert os.path.isfile(os.path.join(work_root, 'pre_build_script_executed'))


def test_ghdl_run():

    os.environ['PATH'] = os.path.join(
Beispiel #26
0
import difflib
import os
import pytest

from test_common import compare_file, get_core, get_synth, vlogdefines, vlogparams

tests_dir = os.path.dirname(__file__)
params = vlogparams + vlogdefines
core = get_core("c3demo")
backend = get_synth('icestorm', core)
ref_dir = os.path.join(tests_dir, __name__)
work_root = backend.work_root


def test_icestorm_configure():

    backend.configure(params)

    ys_file = core.name.sanitized_name + '.ys'

    assert '' == compare_file(ref_dir, work_root, "Makefile")
    assert '' == compare_file(ref_dir, work_root, "config.mk")
    assert '' == compare_file(ref_dir, work_root, ys_file)


def test_icestorm_build():
    os.environ['PATH'] = os.path.join(
        tests_dir, 'mock_commands') + ':' + os.environ['PATH']
    backend.build(params)

    assert '' == compare_file(ref_dir, work_root, 'run.cmd')
Beispiel #27
0
import difflib
import os
import pytest

from test_common import compare_files, get_core, get_synth, vlogdefines, vlogparams

tests_dir = os.path.dirname(__file__)
params = vlogparams + vlogdefines
core = get_core("mor1kx-arty")
backend = get_synth('vivado', core)
ref_dir = os.path.join(tests_dir, __name__)
work_root = backend.work_root


def test_vivado_configure():

    backend.configure(params)

    tcl_file = core.name.sanitized_name + '.tcl'

    compare_files(ref_dir, work_root, [tcl_file])


def test_vivado_build():
    os.environ['PATH'] = os.path.join(
        tests_dir, 'mock_commands') + ':' + os.environ['PATH']
    backend.build()

    compare_files(ref_dir, work_root, ['run.cmd'])
Beispiel #28
0
import difflib
import os
import pytest

from test_common import get_core, get_synth, vlogdefines, vlogparams

tests_dir = os.path.dirname(__file__)
core = get_core("sockit")
backend = get_synth('quartus', core)
work_root = backend.work_root


def test_quartus_configure():
    params = vlogparams + vlogdefines

    backend.configure(params)

    tcl_file = core.name.sanitized_name + '.tcl'
    ref_dir = os.path.join(tests_dir, __name__)

    for f in ['config.mk', 'Makefile', 'sockit_0.tcl']:
        with open(os.path.join(ref_dir,
                               f)) as fref, open(os.path.join(work_root,
                                                              f)) as fgen:
            assert fref.read() == fgen.read(), f


def test_quartus_build():
    os.environ['PATH'] = os.path.join(
        tests_dir, 'mock_commands') + ':' + os.environ['PATH']
    backend.build()