def simulate(prj, specs, dsn_name): view_name = specs['view_name'] sim_envs = specs['sim_envs'] dsn_specs = specs[dsn_name] data_dir = dsn_specs['data_dir'] impl_lib = dsn_specs['impl_lib'] gen_cell = dsn_specs['gen_cell'] testbenches = dsn_specs['testbenches'] results_dict = {} for name, info in testbenches.items(): tb_params = info['tb_params'] tb_gen_cell = '%s_%s' % (gen_cell, name) # setup testbench ADEXL state print('setting up %s' % tb_gen_cell) tb = prj.configure_testbench(impl_lib, tb_gen_cell) print('tb object created!') # set testbench parameters values for key, val in tb_params.items(): tb.set_parameter(key, val) print('parameters are set!') # set config view, i.e. schematic vs extracted tb.set_simulation_view(impl_lib, gen_cell, view_name) print(f'changed the config view to {view_name}!') # set process corners tb.set_simulation_environments(sim_envs) print(f'set tb environment to {sim_envs}') # commit changes to ADEXL state back to database tb.update_testbench() print('updated changes to ADEXL') # start simulation print('running simulation') tb.run_simulation() # import simulation results to Python print('simulation done, load results') results = load_sim_results(tb.save_dir) # save simulation data as HDF5 format save_sim_results(results, os.path.join(data_dir, '%s.hdf5' % tb_gen_cell)) results_dict[name] = results print('all simulation done') return results_dict
def simulate(self): """ Runs a batch of simulations on the generated TB's. All parameters for simulation are set within the spec file """ print('Running Simulation') impl_lib = self.specs['impl_lib'] impl_cell = self.specs['impl_cell'] results_dict = {} for tb_impl_cell, info in self.specs['tb_params'].items(): tb_params = info['tb_sim_params'] view_name = info['view_name'] sim_envs = info['sim_envs'] data_dir = info['data_dir'] # setup testbench ADEXL state print('setting up %s' % tb_impl_cell) tb = self.prj.configure_testbench(impl_lib, tb_impl_cell) # set testbench parameters values for key, val in tb_params.items(): tb.set_parameter(key, val) # set config view, i.e. schematic vs extracted tb.set_simulation_view(impl_lib, impl_cell, view_name) # set process corners tb.set_simulation_environments(sim_envs) # commit changes to ADEXL state back to database tb.update_testbench() print('running simulation') tb.run_simulation() print('simulation done, load results') results = load_sim_results(tb.save_dir) save_sim_results(results, os.path.join(data_dir, '%s.hdf5' % tb_impl_cell)) results_dict[tb_impl_cell] = results print('all simulation done') return results_dict