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'})
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'
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'))
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()
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))
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
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')))
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')))
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))
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)
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)))
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)))
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' })
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)
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)
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')
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')
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()
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
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)
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
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 == ''
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'
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():
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(
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')
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'])
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()