Esempio n. 1
0
bool embed_command::execute()
{
  const auto settings = make_settings();
  const auto statistics = std::make_shared<properties>();

  if ( opts.is_set( "only_lines" ) )
  {
    auto lines = calculate_additional_lines( bdds.current(), settings, statistics );

    std::cout << boost::format( "[i] required lines: %d" ) % lines << std::endl;
  }
  else
  {
    if ( rcbdds.empty() || opts.is_set( "new" ) )
    {
      rcbdds.extend();
    }

    embed_bdd( rcbdds.current(), bdds.current(), settings, statistics );
  }

  std::cout << boost::format( "[i] run-time: %.2f secs" ) % statistics->get<double>( "runtime" ) << std::endl;

  return true;
}
Esempio n. 2
0
bool nct_command::execute()
{
  auto& circuits = env->store<circuit>();

  auto settings = make_settings();
  auto mapped = nct_mapping( circuits.current(), settings, statistics );
  print_runtime();

  extend_if_new( circuits );

  circuits.current() = mapped;

  return true;
}
Esempio n. 3
0
bool required_lines_command::execute()
{
  const auto& bdds = env->store<bdd_function_t>();

  const auto settings = make_settings();

  additional = calculate_additional_lines( bdds.current(), settings, statistics );

  std::cout << "[i] inputs:     " << statistics->get<unsigned>( "num_inputs" ) << std::endl
            << "[i] outputs:    " << statistics->get<unsigned>( "num_outputs" ) << std::endl
            << "[i] additional: " << additional << std::endl
            << boost::format( "[i] run-time:   %.2f secs" ) % statistics->get<double>( "runtime" ) << std::endl;

  return true;
}
Esempio n. 4
0
bool simgraph_command::execute()
{
  std::vector<unsigned> types;
  foreach_string( vectors, ",", [&]( const std::string& s ) {
      if      ( s == "ah" ) types += 0u;
      else if ( s == "1h" ) types += 3u;
      else if ( s == "2h" ) types += 5u;
      else if ( s == "ac" ) types += 1u;
      else if ( s == "1c" ) types += 2u;
      else if ( s == "2c" ) types += 4u;
    } );

  auto settings = make_settings();
  settings->set( "simulation_signatures", signatures ? boost::optional<unsigned>( signatures ) : boost::optional<unsigned>() );
  if ( opts.is_set( "dotname" ) )
  {
    settings->set( "dotname", dotname );
  }
  statistics = std::make_shared<properties>();

  const auto graph = create_simulation_graph( aig(), types, settings, statistics );

  std::cout << format( "[i] create_simulation_graph:  %.2f secs" ) % statistics->get<double>( "runtime" ) << std::endl
            << format( "[i] - labeling time:          %.2f secs" ) % statistics->get<double>( "labeling_runtime" ) << std::endl
            << format( "[i] - vertices:               %d" ) % boost::num_vertices( graph ) << std::endl
            << format( "[i] - edges:                  %d" ) % boost::num_edges( graph ) << std::endl;

  if ( opts.is_set( "signatures" ) && signatures )
  {
    const auto& _info = info();
    const auto& meta  = boost::get_property( graph, boost::graph_meta );
    const auto offset = meta.num_inputs + meta.num_vectors;
    const auto& sigs  = boost::get( boost::vertex_simulation_signature, graph );

    std::cout << "[i] simulation signatures:" << std::endl;
    for ( auto i = 0u; i < _info.outputs.size(); ++i )
    {
      std::cout << format( "[i] %s : %s" ) % _info.outputs.at( i ).second % any_join( *sigs[offset + i], " " ) << std::endl;
    }
  }

  if ( opts.is_set( "patternname" ) )
  {
    write_pattern_file();
  }

  return true;
}
Esempio n. 5
0
bool rec_command::execute()
{
  const auto& circuits = env->store<circuit>();

  auto settings = make_settings();
  settings->set( "name_mapping", is_set( "name_mapping" ) );
  result = xorsat_equivalence_check( circuits[id1], circuits[id2], settings, statistics );

  print_runtime();

  if ( result )
  {
    std::cout << "[i] circuits are \033[1;32mequivalent\033[0m" << std::endl;
  }
  else
  {
    std::cout << "[i] circuits are \033[1;31mnot equivalent\033[0m" << std::endl;
  }

  return true;
}
Esempio n. 6
0
bool tbs_command::execute()
{
  auto& circuits = env->store<circuit>();
  auto& rcbdds   = env->store<rcbdd>();
  auto& specs    = env->store<binary_truth_table>();

  auto settings = make_settings();
  auto statistics = std::make_shared<properties>();

  if ( circuits.empty() || opts.is_set( "new" ) )
  {
    circuits.extend();
  }

  circuit circ;

  if ( opts.is_set( "bdd" ) )
  {
    symbolic_transformation_based_synthesis( circ, rcbdds.current(), settings, statistics );
    std::cout << boost::format( "[i] adjusted assignments: %d" ) % statistics->get<unsigned>( "assignment_count" ) << std::endl;
  }
  else if ( opts.is_set( "sat" ) )
  {
    settings->set( "cnf_from_aig", opts.is_set( "cnf_from_aig" ) );
    settings->set( "all_assumptions", opts.is_set( "all_assumptions" ) );
    symbolic_transformation_based_synthesis_sat( circ, rcbdds.current(), settings, statistics );
    std::cout << boost::format( "[i] adjusted assignments: %d" ) % statistics->get<unsigned>( "assignment_count" ) << std::endl;
  }
  else
  {
    transformation_based_synthesis( circ, specs.current(), settings, statistics );
  }

  circuits.current() = circ;

  std::cout << boost::format( "[i] run-time: %.2f secs" ) % statistics->get<double>( "runtime" ) << std::endl;

  return true;
}
Esempio n. 7
0
bool qbs_command::execute()
{
  const auto& rcbdds = env->store<rcbdd>();
  auto& circuits = env->store<circuit>();

  if ( circuits.empty() || is_set( "new" ) )
  {
    circuits.extend();
  }

  const auto settings = make_settings();

  auto esopmin_settings = std::make_shared<properties>();
  esopmin_settings->set( "verbose", is_verbose() );
  settings->set( "esopmin", esop_minimizer ? dd_based_exorcism_minimization_func( esopmin_settings ) : dd_based_esop_minimization_func( esopmin_settings ) );

  qmdd_synthesis( circuits.current(), rcbdds.current(), settings, statistics );

  std::cout << boost::format( "[i] run-time: %.2f secs" ) % statistics->get<double>( "runtime" ) << std::endl;

  return true;
}