Exemple #1
0
  void
Router::cb_stats ()
{
  if (1) {
    Crossbar c_b(I, O, flit_size);
    c_b.compute_power();
    crossbar.delay = c_b.delay;
    crossbar.power.readOp.dynamic = c_b.power.readOp.dynamic;
    crossbar.power.readOp.leakage = c_b.power.readOp.leakage;
    crossbar.power.readOp.gate_leakage = c_b.power.readOp.gate_leakage;
    crossbar.area = c_b.area;
  }
  else {
    crossbar.power.readOp.dynamic = tr_crossbar_power();
    crossbar.power.readOp.leakage = flit_size * I * O *
        cmos_Isub_leakage(NTtr*g_tp.min_w_nmos_, PTtr*min_w_pmos, 1, tg);
    crossbar.power.readOp.gate_leakage = flit_size * I * O *
        cmos_Ig_leakage(NTtr*g_tp.min_w_nmos_, PTtr*min_w_pmos, 1, tg);
  }
}
Exemple #2
0
/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  main
 *  Description:  
 * =====================================================================================
 */
int main(int argc, char *argv[])
{
	a_b();
	c_b();
	return EXIT_SUCCESS;
}				/* ----------  end of function main  ---------- */
  void
  Solver::make_problem_pb()
  {
    if (problem_discrete == 0)
      throw logic_error("Discrete problem doesn't exist.");

    if (problem_pb != 0)
      delete problem_pb;

    problem_pb = new Problem();

    // clear variables mapping
    vars_mapping.clear();

    // add variables
    for (size_t i = 0, index = 0; i < Problem::VARS_GROUPS_TOTAL; ++i)
    {
      Problem::Vars_group group = Problem::Vars_group(i);
      for (size_t j = 0; j < problem_discrete->get_variables_num(group); ++j)
      {
        Variable& v_d = problem_discrete->get_variable(group, j);
        real_t lower_bound = v_d.get_lower_bound();
        real_t upper_bound = v_d.get_upper_bound();
        size_t num = size_t(floor(log(upper_bound.get_d() -
                                      lower_bound.get_d()) /
                                  log(2)) +
                            1);

        for (size_t k = 0; k < num; ++k, ++index)
        {
          ostringstream stream;
          stream << k;
          string name;

          if (group == Problem::VARS_NEXT_STATE)
          {
            name = v_d.get_name();
            name.erase(name.end() - 1);
            name += "_" + stream.str() + "'";
          }
          else
            name = v_d.get_name() + "_" + stream.str();

          Variable v_b(name, Variable::INTEGER, 0, 1);
          problem_pb->add_variable(group, v_b);
          vars_mapping[v_d.get_name()].push_back(name);
        }
      }
    }

    // add constraints
    for (size_t i = 0; i < Problem::CONSTRS_GROUPS_TOTAL; ++i)
    {
      Problem::Constrs_group group = Problem::Constrs_group(i);
      for (size_t j = 0; j < problem_discrete->get_constraints_num(group); ++j)
      {
        Constraint& c_d = problem_discrete->get_constraint(group, j);
        Constraint c_b(c_d.get_type());
        real_t free_member = 0;
        for (size_t k = 0; k < problem_discrete->get_constraints_vars_num(group); ++k)
        {
          Variable& v_d = problem_discrete->get_constraints_var(group, k);
          real_t coeff = c_d.get_coeff(v_d);
          if (coeff != 0)
          {
            for (size_t w = 0; w < vars_mapping[v_d.get_name()].size(); ++w)
            {
              string& name = vars_mapping[v_d.get_name()][w];
              c_b.set_coeff(name, coeff * pow(2.0f, w));
            }
            free_member += coeff * v_d.get_lower_bound();
          }
        }
        free_member += c_d.get_free_member();
        c_b.set_free_member(free_member);
        problem_pb->add_constraint(group, c_b);
      }
    }
  }