Exemple #1
0
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
Exemple #2
0
    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