def run_solver_bin_ar(bin_ar, arch_config, rtl_root, run_root, sim_out=None, target='generic', flow='vsim', stdout=None, stderr=None): global VERBOSE if not os.access(arch_config, os.R_OK): raise RuntimeError('Invalid architecture config "%s"' % arch_config) arch_md5 = sys_utils.md5_file(arch_config) cfg = read_arch_config(arch_config) tgt_sig = cfg.get_tgt_sig() sim_cc, sim_exe = sim_utils.get_rtl_tools(flow) sys_utils.mkdir_p(os.path.abspath(run_root)) t_wd = get_target_out_dir(cfg.get_tgt_sig(), arch_md5, run_root) lib_path = os.path.join(t_wd, 'hw-libs') # If RTL folder does not exist, generate it from config file if not os.path.isdir(lib_path): tgt_rtl_root = os.path.join(rtl_root, 'core', cfg.name, cfg.get_tgt_attr()) rtl_path = (os.path.join(rtl_root, 'common'), os.path.join(rtl_root, 'memory'), os.path.join(rtl_root, 'top'), tgt_rtl_root) solver_rtl_gen.generate_rtl_package( cfg, lib_path, rtl_path=rtl_path, tb_path=(os.path.join(rtl_root, 'testbench'), ), def_path=(os.path.join(rtl_root, 'define'), ), target=target, tb_module='simd_top_testbench', lib='work') sim_wd = os.path.join(lib_path, '%s_wd' % flow) # Check if it is necessary to compile the simulation libraries check_and_compile_solver_rtl(lib_path, sim_wd, flow, sim_cc, stdout=stdout, stderr=stderr) # Setup application files clean_solver_rtl_simulation(sim_wd) app_name = sys_utils.get_path_basename(bin_ar) setup_solver_mem_files(bin_ar, sim_wd) # Run the actual simulation run_solver_rtl_simulation(sim_exe, sim_wd, flow, lib_path, cfg, stdout=stdout, stderr=stderr, gui=False) if not sim_out: sim_out = os.path.join(t_wd, 'sim-out', app_name) move_dump_files(sim_wd, sim_out)
def generate_solver_program_html(info_fpath, template_dir, out_dir, p_name=None): if not p_name: p_name = sys_utils.get_path_basename(info_fpath) p_info = solver_json_utils.read_solver_json_info(info_fpath) template_dir = os.path.abspath(template_dir) out_dir = os.path.abspath(out_dir) sys_utils.mkdir_p(out_dir) sys_utils.copy_if_newer(os.path.join(template_dir, 'css'), out_dir) sys_utils.copy_if_newer(os.path.join(template_dir, 'js'), out_dir) sys_utils.copy_if_newer(os.path.join(template_dir, 'images'), out_dir) funcs = sorted(p_info['functions'].items(), key=lambda x: x[1]['address']) dobjs = sorted(p_info['data_objects'].items(), key=lambda x: x[1]['address']) homepage = render_template(os.path.join(template_dir, 'index.html'), program_name=p_name, program=p_info, funcs=funcs, dobjs=dobjs) with open(os.path.join(out_dir, 'index.html'), 'w') as f: f.write(homepage) for f in funcs: funcpage = render_template(os.path.join(template_dir, 'func.html'), func=f[1], funcs=funcs) with open(os.path.join(out_dir, 'func_%s.html' % f[1]['name']), 'w') as f: f.write(funcpage)
def run_solver_bin_ar(bin_ar, arch_config, rtl_root, run_root, sim_out=None, target='generic', flow='vsim', stdout=None, stderr=None): global VERBOSE if not os.access(arch_config, os.R_OK): raise RuntimeError('Invalid architecture config "%s"'%arch_config) arch_md5 = sys_utils.md5_file(arch_config) cfg = read_arch_config(arch_config) tgt_sig = cfg.get_tgt_sig() sim_cc, sim_exe = sim_utils.get_rtl_tools(flow) sys_utils.mkdir_p(os.path.abspath(run_root)) t_wd = get_target_out_dir(cfg.get_tgt_sig(), arch_md5, run_root) lib_path = os.path.join(t_wd, 'hw-libs') # If RTL folder does not exist, generate it from config file if not os.path.isdir(lib_path): tgt_rtl_root = os.path.join(rtl_root,'core',cfg.name,cfg.get_tgt_attr()) rtl_path = (os.path.join(rtl_root, 'common'), os.path.join(rtl_root, 'memory'), os.path.join(rtl_root, 'top'), tgt_rtl_root) solver_rtl_gen.generate_rtl_package( cfg, lib_path, rtl_path=rtl_path, tb_path = (os.path.join(rtl_root, 'testbench'),), def_path = (os.path.join(rtl_root, 'define'),), target=target, tb_module='simd_top_testbench', lib='work') sim_wd = os.path.join(lib_path, '%s_wd'%flow) # Check if it is necessary to compile the simulation libraries check_and_compile_solver_rtl(lib_path, sim_wd, flow, sim_cc, stdout=stdout, stderr=stderr) # Setup application files clean_solver_rtl_simulation(sim_wd) app_name = sys_utils.get_path_basename(bin_ar) setup_solver_mem_files(bin_ar, sim_wd) # Run the actual simulation run_solver_rtl_simulation(sim_exe, sim_wd, flow, lib_path, cfg, stdout=stdout, stderr=stderr, gui=False) if not sim_out: sim_out = os.path.join(t_wd, 'sim-out', app_name) move_dump_files(sim_wd, sim_out)
def generate_solver_program_html(info_fpath, template_dir, out_dir, p_name=None): if not p_name: p_name = sys_utils.get_path_basename(info_fpath) p_info = solver_json_utils.read_solver_json_info(info_fpath) template_dir = os.path.abspath(template_dir) out_dir = os.path.abspath(out_dir) sys_utils.mkdir_p(out_dir) sys_utils.copy_if_newer(os.path.join(template_dir, 'css'), out_dir) sys_utils.copy_if_newer(os.path.join(template_dir, 'js'), out_dir) sys_utils.copy_if_newer(os.path.join(template_dir, 'images'), out_dir) funcs = sorted(p_info['functions'].items(), key= lambda x: x[1]['address']) dobjs = sorted(p_info['data_objects'].items(), key= lambda x: x[1]['address']) homepage = render_template(os.path.join(template_dir, 'index.html'), program_name=p_name, program=p_info, funcs=funcs, dobjs=dobjs) with open(os.path.join(out_dir, 'index.html'), 'w') as f: f.write(homepage) for f in funcs: funcpage = render_template(os.path.join(template_dir, 'func.html'), func=f[1], funcs=funcs) with open(os.path.join(out_dir, 'func_%s.html'%f[1]['name']), 'w') as f: f.write(funcpage)